[llvm] [CodeGen] Strip Coroutine suffixes when generating pseudo probe (PR #173834)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 8 12:20:17 PST 2026
https://github.com/HighW4y2H3ll updated https://github.com/llvm/llvm-project/pull/173834
>From cba9fd121fac0892e548faa53c419b5ad61ff55b Mon Sep 17 00:00:00 2001
From: h2h <h2h at meta.com>
Date: Sun, 28 Dec 2025 23:11:02 -0800
Subject: [PATCH 1/7] [CodeGen] Strip Coroutine suffixes when generating pseudo
probe
---
llvm/lib/CodeGen/AsmPrinter/PseudoProbePrinter.cpp | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/llvm/lib/CodeGen/AsmPrinter/PseudoProbePrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/PseudoProbePrinter.cpp
index 4bf3bdfb5adfd..2185ed1d8309e 100644
--- a/llvm/lib/CodeGen/AsmPrinter/PseudoProbePrinter.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/PseudoProbePrinter.cpp
@@ -17,6 +17,7 @@
#include "llvm/IR/PseudoProbe.h"
#include "llvm/MC/MCPseudoProbe.h"
#include "llvm/MC/MCStreamer.h"
+#include "llvm/ProfileData/SampleProf.h"
#ifndef NDEBUG
#include "llvm/IR/Module.h"
@@ -32,10 +33,15 @@ void PseudoProbeHandler::emitPseudoProbe(uint64_t Guid, uint64_t Index,
// When it's done ReversedInlineStack looks like ([66, B], [88, A])
// which means, Function A inlines function B at calliste with a probe id 88,
// and B inlines C at probe 66 where C is represented by Guid.
+ static const SmallVector<StringRef, 3> CoroSuffixes{".cleanup", ".destroy",
+ ".resume"};
SmallVector<InlineSite, 8> ReversedInlineStack;
auto *InlinedAt = DebugLoc ? DebugLoc->getInlinedAt() : nullptr;
while (InlinedAt) {
auto Name = InlinedAt->getSubprogramLinkageName();
+ // Strip Coroutine suffixes from CoroSplit Pass, since pseudo probes are
+ // generated in an earlier stage.
+ Name = FunctionSamples::getCanonicalFnName(Name, CoroSuffixes);
// Use caching to avoid redundant md5 computation for build speed.
uint64_t &CallerGuid = NameGuidMap[Name];
if (!CallerGuid)
>From 1563cd481394c250d75bad0e5b3a701ddd9ba28c Mon Sep 17 00:00:00 2001
From: h2h <h2h at meta.com>
Date: Sun, 28 Dec 2025 23:38:05 -0800
Subject: [PATCH 2/7] Add dependency
---
llvm/lib/CodeGen/AsmPrinter/CMakeLists.txt | 1 +
1 file changed, 1 insertion(+)
diff --git a/llvm/lib/CodeGen/AsmPrinter/CMakeLists.txt b/llvm/lib/CodeGen/AsmPrinter/CMakeLists.txt
index 34969d7524890..58fab8b634ad6 100644
--- a/llvm/lib/CodeGen/AsmPrinter/CMakeLists.txt
+++ b/llvm/lib/CodeGen/AsmPrinter/CMakeLists.txt
@@ -41,6 +41,7 @@ add_llvm_component_library(LLVMAsmPrinter
DebugInfoDWARFLowLevel
MC
MCParser
+ ProfileData
Remarks
Support
Target
>From f6cac2d8b1f9098881b5e5f1ad1d9c444b9951ec Mon Sep 17 00:00:00 2001
From: h2h <h2h at meta.com>
Date: Fri, 2 Jan 2026 22:38:20 -0800
Subject: [PATCH 3/7] Add test case
---
.../Inputs/pseudo-probe-coro-debug-fix.cpp | 30 +
.../pseudo-probe-coro-debug-fix.ll | 728 ++++++++++++++++++
2 files changed, 758 insertions(+)
create mode 100644 llvm/test/Transforms/SampleProfile/Inputs/pseudo-probe-coro-debug-fix.cpp
create mode 100644 llvm/test/Transforms/SampleProfile/pseudo-probe-coro-debug-fix.ll
diff --git a/llvm/test/Transforms/SampleProfile/Inputs/pseudo-probe-coro-debug-fix.cpp b/llvm/test/Transforms/SampleProfile/Inputs/pseudo-probe-coro-debug-fix.cpp
new file mode 100644
index 0000000000000..e2da75345c5e8
--- /dev/null
+++ b/llvm/test/Transforms/SampleProfile/Inputs/pseudo-probe-coro-debug-fix.cpp
@@ -0,0 +1,30 @@
+#include <coroutine>
+
+struct co_sleep {
+ co_sleep(int n) : delay{n} {}
+ constexpr bool await_ready() const noexcept { return false; }
+ void await_suspend(std::coroutine_handle<> h) const noexcept {}
+ void await_resume() const noexcept {}
+ int delay;
+};
+
+
+struct Task {
+ struct promise_type {
+ promise_type() = default;
+ Task get_return_object() { return {}; }
+ std::suspend_never initial_suspend() { return {}; }
+ std::suspend_always final_suspend() noexcept { return {}; }
+ void unhandled_exception() {}
+ };
+};
+
+Task foo() noexcept {
+ co_await co_sleep{10};
+}
+
+int main() {
+ foo();
+}
+
+// clang++ -S -O0 SampleProfile/Inputs/pseudo-probe-coro-debug-fix.cpp -emit-llvm -Xclang -disable-llvm-passes -std=c++20 -o SampleProfile/pseudo-probe-coro-debug-fix.ll
diff --git a/llvm/test/Transforms/SampleProfile/pseudo-probe-coro-debug-fix.ll b/llvm/test/Transforms/SampleProfile/pseudo-probe-coro-debug-fix.ll
new file mode 100644
index 0000000000000..c111123cb3a64
--- /dev/null
+++ b/llvm/test/Transforms/SampleProfile/pseudo-probe-coro-debug-fix.ll
@@ -0,0 +1,728 @@
+; RUN: opt < %s -passes='pseudo-probe,cgscc(coro-split),coro-cleanup,early-cse' -mtriple=x86_64 -S -o %t
+; RUN: llc -mtriple=x86_64-- < %t | FileCheck %s
+
+; CHECK: .section .pseudo_probe_desc,"", at progbits
+; CHECK-NEXT: .quad 9191153033785521275
+; CHECK-NEXT: .quad 3378390095374084
+; CHECK-NEXT: .byte 7
+; CHECK-NEXT: .ascii "_Z3foov"
+; CHECK-NEXT: .quad 1080103601501470593
+; CHECK-NEXT: .quad 562954248388607
+; CHECK-NEXT: .byte 22
+; CHECK-NEXT: .ascii "__clang_call_terminate"
+; CHECK-NEXT: .quad -5983175768063907623
+; CHECK-NEXT: .quad 4294967295
+; CHECK-NEXT: .byte 43
+; CHECK-NEXT: .ascii "_ZN4Task12promise_type17get_return_objectEv"
+; CHECK-NEXT: .quad 9223044513579825966
+; CHECK-NEXT: .quad 4294967295
+; CHECK-NEXT: .byte 41
+; CHECK-NEXT: .ascii "_ZN4Task12promise_type15initial_suspendEv"
+; CHECK-NEXT: .quad 3637514160624257742
+; CHECK-NEXT: .quad 4294967295
+; CHECK-NEXT: .byte 44
+; CHECK-NEXT: .ascii "_ZNKSt7__n486113suspend_never11await_readyEv"
+; CHECK-NEXT: .quad 4804537283846854890
+; CHECK-NEXT: .quad 844429225099263
+; CHECK-NEXT: .byte 37
+; CHECK-NEXT: .ascii "_Z3foov.__await_suspend_wrapper__init"
+; CHECK-NEXT: .quad 7163718281371254139
+; CHECK-NEXT: .quad 4294967295
+; CHECK-NEXT: .byte 70
+; CHECK-NEXT: .ascii "_ZNKSt7__n486113suspend_never13await_suspendENS_16coroutine_handleIvEE"
+; CHECK-NEXT: .quad -8352551662853914866
+; CHECK-NEXT: .quad 281479271677951
+; CHECK-NEXT: .byte 71
+; CHECK-NEXT: .ascii "_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEE12from_addressEPv"
+; CHECK-NEXT: .quad -4287562419115964352
+; CHECK-NEXT: .quad 562954248388607
+; CHECK-NEXT: .byte 67
+; CHECK-NEXT: .ascii "_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEcvNS0_IvEEEv"
+; CHECK-NEXT: .quad -3595869838865620152
+; CHECK-NEXT: .quad 4294967295
+; CHECK-NEXT: .byte 45
+; CHECK-NEXT: .ascii "_ZNKSt7__n486113suspend_never12await_resumeEv"
+; CHECK-NEXT: .quad -4360651593791024226
+; CHECK-NEXT: .quad 4294967295
+; CHECK-NEXT: .byte 16
+; CHECK-NEXT: .ascii "_ZN8co_sleepC2Ei"
+; CHECK-NEXT: .quad 194070738489204334
+; CHECK-NEXT: .quad 4294967295
+; CHECK-NEXT: .byte 28
+; CHECK-NEXT: .ascii "_ZNK8co_sleep11await_readyEv"
+; CHECK-NEXT: .quad -6207857456115168182
+; CHECK-NEXT: .quad 844429225099263
+; CHECK-NEXT: .byte 38
+; CHECK-NEXT: .ascii "_Z3foov.__await_suspend_wrapper__await"
+; CHECK-NEXT: .quad -707552474449578794
+; CHECK-NEXT: .quad 4294967295
+; CHECK-NEXT: .byte 62
+; CHECK-NEXT: .ascii "_ZNK8co_sleep13await_suspendENSt7__n486116coroutine_handleIvEE"
+; CHECK-NEXT: .quad 2482723163529722706
+; CHECK-NEXT: .quad 4294967295
+; CHECK-NEXT: .byte 29
+; CHECK-NEXT: .ascii "_ZNK8co_sleep12await_resumeEv"
+; CHECK-NEXT: .quad 2751305985409977170
+; CHECK-NEXT: .quad 4294967295
+; CHECK-NEXT: .byte 45
+; CHECK-NEXT: .ascii "_ZN4Task12promise_type19unhandled_exceptionEv"
+; CHECK-NEXT: .quad 5392659810511438807
+; CHECK-NEXT: .quad 4294967295
+; CHECK-NEXT: .byte 39
+; CHECK-NEXT: .ascii "_ZN4Task12promise_type13final_suspendEv"
+; CHECK-NEXT: .quad -5299639869497052884
+; CHECK-NEXT: .quad 4294967295
+; CHECK-NEXT: .byte 45
+; CHECK-NEXT: .ascii "_ZNKSt7__n486114suspend_always11await_readyEv"
+; CHECK-NEXT: .quad -3505192329872532516
+; CHECK-NEXT: .quad 844429225099263
+; CHECK-NEXT: .byte 38
+; CHECK-NEXT: .ascii "_Z3foov.__await_suspend_wrapper__final"
+; CHECK-NEXT: .quad -7204990471824719232
+; CHECK-NEXT: .quad 4294967295
+; CHECK-NEXT: .byte 71
+; CHECK-NEXT: .ascii "_ZNKSt7__n486114suspend_always13await_suspendENS_16coroutine_handleIvEE"
+; CHECK-NEXT: .quad 1383777007208917084
+; CHECK-NEXT: .quad 4294967295
+; CHECK-NEXT: .byte 46
+; CHECK-NEXT: .ascii "_ZNKSt7__n486114suspend_always12await_resumeEv"
+; CHECK-NEXT: .quad -2624081020897602054
+; CHECK-NEXT: .quad 281479271677951
+; CHECK-NEXT: .byte 4
+; CHECK-NEXT: .ascii "main"
+; CHECK-NEXT: .quad 8552724234615586455
+; CHECK-NEXT: .quad 4294967295
+; CHECK-NEXT: .byte 58
+; CHECK-NEXT: .ascii "_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEEC2Ev"
+; CHECK-NEXT: .quad 8637232519489628998
+; CHECK-NEXT: .quad 281479271677951
+; CHECK-NEXT: .byte 51
+; CHECK-NEXT: .ascii "_ZNSt7__n486116coroutine_handleIvE12from_addressEPv"
+; CHECK-NEXT: .quad 8181587454597930979
+; CHECK-NEXT: .quad 4294967295
+; CHECK-NEXT: .byte 65
+; CHECK-NEXT: .ascii "_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEE7addressEv"
+; CHECK-NEXT: .quad 2426770966769951745
+; CHECK-NEXT: .quad 4294967295
+; CHECK-NEXT: .byte 38
+; CHECK-NEXT: .ascii "_ZNSt7__n486116coroutine_handleIvEC2Ev"
+
+; ModuleID = 'SampleProfile/Inputs/pseudo-probe-coro-debug-fix.cpp'
+source_filename = "SampleProfile/Inputs/pseudo-probe-coro-debug-fix.cpp"
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-redhat-linux-gnu"
+
+%"struct.Task::promise_type" = type { i8 }
+%struct.Task = type { i8 }
+%"struct.std::__n4861::suspend_never" = type { i8 }
+%struct.co_sleep = type { i32 }
+%"struct.std::__n4861::suspend_always" = type { i8 }
+%"struct.std::__n4861::coroutine_handle" = type { ptr }
+%"struct.std::__n4861::coroutine_handle.0" = type { ptr }
+
+$__clang_call_terminate = comdat any
+
+$_ZN4Task12promise_type17get_return_objectEv = comdat any
+
+$_ZN4Task12promise_type15initial_suspendEv = comdat any
+
+$_ZNKSt7__n486113suspend_never11await_readyEv = comdat any
+
+$_ZNKSt7__n486113suspend_never13await_suspendENS_16coroutine_handleIvEE = comdat any
+
+$_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEE12from_addressEPv = comdat any
+
+$_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEcvNS0_IvEEEv = comdat any
+
+$_ZNKSt7__n486113suspend_never12await_resumeEv = comdat any
+
+$_ZN8co_sleepC2Ei = comdat any
+
+$_ZNK8co_sleep11await_readyEv = comdat any
+
+$_ZNK8co_sleep13await_suspendENSt7__n486116coroutine_handleIvEE = comdat any
+
+$_ZNK8co_sleep12await_resumeEv = comdat any
+
+$_ZN4Task12promise_type19unhandled_exceptionEv = comdat any
+
+$_ZN4Task12promise_type13final_suspendEv = comdat any
+
+$_ZNKSt7__n486114suspend_always11await_readyEv = comdat any
+
+$_ZNKSt7__n486114suspend_always13await_suspendENS_16coroutine_handleIvEE = comdat any
+
+$_ZNKSt7__n486114suspend_always12await_resumeEv = comdat any
+
+$_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEEC2Ev = comdat any
+
+$_ZNSt7__n486116coroutine_handleIvE12from_addressEPv = comdat any
+
+$_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEE7addressEv = comdat any
+
+$_ZNSt7__n486116coroutine_handleIvEC2Ev = comdat any
+
+; Function Attrs: mustprogress noinline nounwind optnone presplitcoroutine uwtable
+define dso_local void @_Z3foov() #0 personality ptr @__gxx_personality_v0 {
+entry:
+ %__promise = alloca %"struct.Task::promise_type", align 1
+ %undef.agg.tmp = alloca %struct.Task, align 1
+ %ref.tmp = alloca %"struct.std::__n4861::suspend_never", align 1
+ %undef.agg.tmp3 = alloca %"struct.std::__n4861::suspend_never", align 1
+ %ref.tmp5 = alloca %struct.co_sleep, align 4
+ %exn.slot = alloca ptr, align 8
+ %ehselector.slot = alloca i32, align 4
+ %ref.tmp13 = alloca %"struct.std::__n4861::suspend_always", align 1
+ %undef.agg.tmp14 = alloca %"struct.std::__n4861::suspend_always", align 1
+ %0 = call token @llvm.coro.id(i32 16, ptr %__promise, ptr null, ptr null)
+ %1 = call i1 @llvm.coro.alloc(token %0)
+ br i1 %1, label %coro.alloc, label %coro.init
+
+coro.alloc: ; preds = %entry
+ %2 = call i64 @llvm.coro.size.i64()
+ %call = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef %2) #13
+ to label %invoke.cont unwind label %terminate.lpad
+
+invoke.cont: ; preds = %coro.alloc
+ br label %coro.init
+
+coro.init: ; preds = %invoke.cont, %entry
+ %3 = phi ptr [ null, %entry ], [ %call, %invoke.cont ]
+ %4 = call ptr @llvm.coro.begin(token %0, ptr %3)
+ call void @llvm.lifetime.start.p0(ptr %__promise) #2
+ invoke void @_ZN4Task12promise_type17get_return_objectEv(ptr noundef nonnull align 1 dereferenceable(1) %__promise)
+ to label %invoke.cont1 unwind label %terminate.lpad
+
+invoke.cont1: ; preds = %coro.init
+ call void @llvm.lifetime.start.p0(ptr %ref.tmp) #2
+ invoke void @_ZN4Task12promise_type15initial_suspendEv(ptr noundef nonnull align 1 dereferenceable(1) %__promise)
+ to label %invoke.cont2 unwind label %terminate.lpad
+
+invoke.cont2: ; preds = %invoke.cont1
+ %call4 = call noundef zeroext i1 @_ZNKSt7__n486113suspend_never11await_readyEv(ptr noundef nonnull align 1 dereferenceable(1) %ref.tmp) #2
+ br i1 %call4, label %init.ready, label %init.suspend
+
+init.suspend: ; preds = %invoke.cont2
+ %5 = call token @llvm.coro.save(ptr null)
+ call void @llvm.coro.await.suspend.void(ptr %ref.tmp, ptr %4, ptr @_Z3foov.__await_suspend_wrapper__init) #2
+ %6 = call i8 @llvm.coro.suspend(token %5, i1 false)
+ switch i8 %6, 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, %invoke.cont2
+ call void @_ZNKSt7__n486113suspend_never12await_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(ptr %ref.tmp) #2
+ switch i32 %cleanup.dest.slot.0, label %cleanup19 [
+ i32 0, label %cleanup.cont
+ ]
+
+cleanup.cont: ; preds = %cleanup
+ call void @llvm.lifetime.start.p0(ptr %ref.tmp5) #2
+ invoke void @_ZN8co_sleepC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %ref.tmp5, i32 noundef 10)
+ to label %invoke.cont6 unwind label %lpad
+
+invoke.cont6: ; preds = %cleanup.cont
+ %call7 = call noundef zeroext i1 @_ZNK8co_sleep11await_readyEv(ptr noundef nonnull align 4 dereferenceable(4) %ref.tmp5) #2
+ br i1 %call7, label %await.ready, label %await.suspend
+
+await.suspend: ; preds = %invoke.cont6
+ %7 = call token @llvm.coro.save(ptr null)
+ call void @llvm.coro.await.suspend.void(ptr %ref.tmp5, ptr %4, ptr @_Z3foov.__await_suspend_wrapper__await) #2
+ %8 = call i8 @llvm.coro.suspend(token %7, i1 false)
+ switch i8 %8, label %coro.ret [
+ i8 0, label %await.ready
+ i8 1, label %await.cleanup
+ ]
+
+await.cleanup: ; preds = %await.suspend
+ br label %cleanup8
+
+lpad: ; preds = %cleanup.cont
+ %9 = landingpad { ptr, i32 }
+ catch ptr null
+ %10 = extractvalue { ptr, i32 } %9, 0
+ store ptr %10, ptr %exn.slot, align 8
+ %11 = extractvalue { ptr, i32 } %9, 1
+ store i32 %11, ptr %ehselector.slot, align 4
+ call void @llvm.lifetime.end.p0(ptr %ref.tmp5) #2
+ br label %catch
+
+catch: ; preds = %lpad
+ %exn = load ptr, ptr %exn.slot, align 8
+ %12 = call ptr @__cxa_begin_catch(ptr %exn) #2
+ invoke void @_ZN4Task12promise_type19unhandled_exceptionEv(ptr noundef nonnull align 1 dereferenceable(1) %__promise)
+ to label %invoke.cont11 unwind label %terminate.lpad
+
+invoke.cont11: ; preds = %catch
+ invoke void @__cxa_end_catch()
+ to label %invoke.cont12 unwind label %terminate.lpad
+
+invoke.cont12: ; preds = %invoke.cont11
+ br label %try.cont
+
+try.cont: ; preds = %invoke.cont12, %cleanup.cont10
+ br label %coro.final
+
+coro.final: ; preds = %try.cont
+ call void @llvm.lifetime.start.p0(ptr %ref.tmp13) #2
+ call void @_ZN4Task12promise_type13final_suspendEv(ptr noundef nonnull align 1 dereferenceable(1) %__promise) #2
+ %call15 = call noundef zeroext i1 @_ZNKSt7__n486114suspend_always11await_readyEv(ptr noundef nonnull align 1 dereferenceable(1) %ref.tmp13) #2
+ br i1 %call15, label %final.ready, label %final.suspend
+
+final.suspend: ; preds = %coro.final
+ %13 = call token @llvm.coro.save(ptr null)
+ call void @llvm.coro.await.suspend.void(ptr %ref.tmp13, ptr %4, ptr @_Z3foov.__await_suspend_wrapper__final) #2
+ %14 = call i8 @llvm.coro.suspend(token %13, i1 true)
+ switch i8 %14, label %coro.ret [
+ i8 0, label %final.ready
+ i8 1, label %final.cleanup
+ ]
+
+final.cleanup: ; preds = %final.suspend
+ br label %cleanup16
+
+await.ready: ; preds = %await.suspend, %invoke.cont6
+ call void @_ZNK8co_sleep12await_resumeEv(ptr noundef nonnull align 4 dereferenceable(4) %ref.tmp5) #2
+ br label %cleanup8
+
+cleanup8: ; preds = %await.ready, %await.cleanup
+ %cleanup.dest.slot.1 = phi i32 [ 0, %await.ready ], [ 2, %await.cleanup ]
+ call void @llvm.lifetime.end.p0(ptr %ref.tmp5) #2
+ switch i32 %cleanup.dest.slot.1, label %cleanup19 [
+ i32 0, label %cleanup.cont10
+ ]
+
+cleanup.cont10: ; preds = %cleanup8
+ br label %try.cont
+
+final.ready: ; preds = %final.suspend, %coro.final
+ call void @_ZNKSt7__n486114suspend_always12await_resumeEv(ptr noundef nonnull align 1 dereferenceable(1) %ref.tmp13) #2
+ br label %cleanup16
+
+cleanup16: ; preds = %final.ready, %final.cleanup
+ %cleanup.dest.slot.2 = phi i32 [ 0, %final.ready ], [ 2, %final.cleanup ]
+ call void @llvm.lifetime.end.p0(ptr %ref.tmp13) #2
+ switch i32 %cleanup.dest.slot.2, label %cleanup19 [
+ i32 0, label %cleanup.cont18
+ ]
+
+cleanup.cont18: ; preds = %cleanup16
+ br label %cleanup19
+
+cleanup19: ; preds = %cleanup.cont18, %cleanup16, %cleanup8, %cleanup
+ %cleanup.dest.slot.3 = phi i32 [ %cleanup.dest.slot.0, %cleanup ], [ %cleanup.dest.slot.1, %cleanup8 ], [ %cleanup.dest.slot.2, %cleanup16 ], [ 0, %cleanup.cont18 ]
+ call void @llvm.lifetime.end.p0(ptr %__promise) #2
+ %15 = call ptr @llvm.coro.free(token %0, ptr %4)
+ %16 = icmp ne ptr %15, null
+ br i1 %16, label %coro.free, label %after.coro.free
+
+coro.free: ; preds = %cleanup19
+ %17 = call i64 @llvm.coro.size.i64()
+ call void @_ZdlPvm(ptr noundef %15, i64 noundef %17) #2
+ br label %after.coro.free
+
+after.coro.free: ; preds = %cleanup19, %coro.free
+ switch i32 %cleanup.dest.slot.3, label %unreachable [
+ i32 0, label %cleanup.cont22
+ i32 2, label %coro.ret
+ ]
+
+cleanup.cont22: ; preds = %after.coro.free
+ br label %coro.ret
+
+coro.ret: ; preds = %cleanup.cont22, %after.coro.free, %final.suspend, %await.suspend, %init.suspend
+ call void @llvm.coro.end(ptr null, i1 false, token none)
+ ret void
+
+terminate.lpad: ; preds = %invoke.cont11, %catch, %invoke.cont1, %coro.init, %coro.alloc
+ %18 = landingpad { ptr, i32 }
+ catch ptr null
+ %19 = extractvalue { ptr, i32 } %18, 0
+ call void @__clang_call_terminate(ptr %19) #14
+ unreachable
+
+unreachable: ; preds = %after.coro.free
+ unreachable
+}
+
+; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: read)
+declare token @llvm.coro.id(i32, ptr readnone, ptr readonly captures(none), ptr) #1
+
+; Function Attrs: nounwind
+declare i1 @llvm.coro.alloc(token) #2
+
+; Function Attrs: nobuiltin allocsize(0)
+declare dso_local noundef nonnull ptr @_Znwm(i64 noundef) #3
+
+; Function Attrs: nounwind memory(none)
+declare i64 @llvm.coro.size.i64() #4
+
+declare dso_local i32 @__gxx_personality_v0(...)
+
+; Function Attrs: noinline noreturn nounwind uwtable
+define linkonce_odr hidden void @__clang_call_terminate(ptr noundef %0) #5 comdat {
+ %2 = call ptr @__cxa_begin_catch(ptr %0) #2
+ call void @_ZSt9terminatev() #14
+ unreachable
+}
+
+declare dso_local ptr @__cxa_begin_catch(ptr)
+
+declare dso_local void @_ZSt9terminatev()
+
+; Function Attrs: nounwind
+declare ptr @llvm.coro.begin(token, ptr writeonly) #2
+
+; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
+declare void @llvm.lifetime.start.p0(ptr captures(none)) #6
+
+; Function Attrs: mustprogress noinline nounwind optnone uwtable
+define linkonce_odr dso_local void @_ZN4Task12promise_type17get_return_objectEv(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
+ %this1 = load ptr, ptr %this.addr, align 8
+ ret void
+}
+
+; Function Attrs: mustprogress noinline nounwind optnone uwtable
+define linkonce_odr dso_local void @_ZN4Task12promise_type15initial_suspendEv(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
+ %this1 = load ptr, ptr %this.addr, align 8
+ ret void
+}
+
+; Function Attrs: mustprogress noinline nounwind optnone uwtable
+define linkonce_odr dso_local noundef zeroext i1 @_ZNKSt7__n486113suspend_never11await_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
+ %this1 = load ptr, ptr %this.addr, align 8
+ ret i1 true
+}
+
+; Function Attrs: nomerge nounwind
+declare token @llvm.coro.save(ptr) #8
+
+; Function Attrs: alwaysinline mustprogress
+define internal void @_Z3foov.__await_suspend_wrapper__init(ptr noundef nonnull %0, ptr noundef %1) #9 {
+entry:
+ %.addr = alloca ptr, align 8
+ %.addr1 = alloca ptr, align 8
+ %agg.tmp = alloca %"struct.std::__n4861::coroutine_handle", align 8
+ %ref.tmp = alloca %"struct.std::__n4861::coroutine_handle.0", align 8
+ store ptr %0, ptr %.addr, align 8
+ store ptr %1, ptr %.addr1, align 8
+ %2 = load ptr, ptr %.addr, align 8
+ %3 = load ptr, ptr %.addr1, align 8
+ %call = call ptr @_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEE12from_addressEPv(ptr noundef %3) #2
+ %coerce.dive = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %ref.tmp, i32 0, i32 0
+ store ptr %call, ptr %coerce.dive, align 8
+ %call2 = call ptr @_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEcvNS0_IvEEEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp) #2
+ %coerce.dive3 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp, i32 0, i32 0
+ store ptr %call2, ptr %coerce.dive3, align 8
+ %coerce.dive4 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp, i32 0, i32 0
+ %4 = load ptr, ptr %coerce.dive4, align 8
+ call void @_ZNKSt7__n486113suspend_never13await_suspendENS_16coroutine_handleIvEE(ptr noundef nonnull align 1 dereferenceable(1) %2, ptr %4) #2
+ ret void
+}
+
+; Function Attrs: mustprogress noinline nounwind optnone uwtable
+define linkonce_odr dso_local void @_ZNKSt7__n486113suspend_never13await_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", align 8
+ %this.addr = alloca ptr, align 8
+ %coerce.dive = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %0, i32 0, i32 0
+ store ptr %.coerce, ptr %coerce.dive, align 8
+ store ptr %this, ptr %this.addr, align 8
+ %this1 = load ptr, ptr %this.addr, align 8
+ ret void
+}
+
+; Function Attrs: mustprogress noinline nounwind optnone uwtable
+define linkonce_odr dso_local ptr @_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEE12from_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
+ call void @_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %retval) #2
+ %0 = load ptr, ptr %__a.addr, align 8
+ %_M_fr_ptr = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %retval, i32 0, i32 0
+ store ptr %0, ptr %_M_fr_ptr, align 8
+ %coerce.dive = getelementptr inbounds nuw %"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: mustprogress noinline nounwind optnone uwtable
+define linkonce_odr dso_local ptr @_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEcvNS0_IvEEEv(ptr noundef nonnull align 8 dereferenceable(8) %this) #7 comdat align 2 {
+entry:
+ %retval = alloca %"struct.std::__n4861::coroutine_handle", align 8
+ %this.addr = alloca ptr, align 8
+ store ptr %this, ptr %this.addr, align 8
+ %this1 = load ptr, ptr %this.addr, align 8
+ %call = call noundef ptr @_ZNKSt7__n486116coroutine_handleIN4Task12promise_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 nuw %"struct.std::__n4861::coroutine_handle", ptr %retval, i32 0, i32 0
+ store ptr %call2, ptr %coerce.dive, align 8
+ %coerce.dive3 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %retval, i32 0, i32 0
+ %0 = load ptr, ptr %coerce.dive3, align 8
+ ret ptr %0
+}
+
+declare void @llvm.coro.await.suspend.void(ptr, ptr, ptr)
+
+; Function Attrs: nounwind
+declare i8 @llvm.coro.suspend(token, i1) #2
+
+; Function Attrs: mustprogress noinline nounwind optnone uwtable
+define linkonce_odr dso_local void @_ZNKSt7__n486113suspend_never12await_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
+ %this1 = load ptr, ptr %this.addr, align 8
+ ret void
+}
+
+; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
+declare void @llvm.lifetime.end.p0(ptr captures(none)) #6
+
+; Function Attrs: mustprogress noinline nounwind optnone uwtable
+define linkonce_odr dso_local void @_ZN8co_sleepC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %this, i32 noundef %n) unnamed_addr #7 comdat align 2 {
+entry:
+ %this.addr = alloca ptr, align 8
+ %n.addr = alloca i32, align 4
+ store ptr %this, ptr %this.addr, align 8
+ store i32 %n, ptr %n.addr, align 4
+ %this1 = load ptr, ptr %this.addr, align 8
+ %delay = getelementptr inbounds nuw %struct.co_sleep, ptr %this1, i32 0, i32 0
+ %0 = load i32, ptr %n.addr, align 4
+ store i32 %0, ptr %delay, align 4
+ ret void
+}
+
+; Function Attrs: mustprogress noinline nounwind optnone uwtable
+define linkonce_odr dso_local noundef zeroext i1 @_ZNK8co_sleep11await_readyEv(ptr noundef nonnull align 4 dereferenceable(4) %this) #7 comdat align 2 {
+entry:
+ %this.addr = alloca ptr, align 8
+ store ptr %this, ptr %this.addr, align 8
+ %this1 = load ptr, ptr %this.addr, align 8
+ ret i1 false
+}
+
+; Function Attrs: alwaysinline mustprogress
+define internal void @_Z3foov.__await_suspend_wrapper__await(ptr noundef nonnull %0, ptr noundef %1) #9 {
+entry:
+ %.addr = alloca ptr, align 8
+ %.addr1 = alloca ptr, align 8
+ %agg.tmp = alloca %"struct.std::__n4861::coroutine_handle", align 8
+ %ref.tmp = alloca %"struct.std::__n4861::coroutine_handle.0", align 8
+ store ptr %0, ptr %.addr, align 8
+ store ptr %1, ptr %.addr1, align 8
+ %2 = load ptr, ptr %.addr, align 8
+ %3 = load ptr, ptr %.addr1, align 8
+ %call = call ptr @_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEE12from_addressEPv(ptr noundef %3) #2
+ %coerce.dive = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %ref.tmp, i32 0, i32 0
+ store ptr %call, ptr %coerce.dive, align 8
+ %call2 = call ptr @_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEcvNS0_IvEEEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp) #2
+ %coerce.dive3 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp, i32 0, i32 0
+ store ptr %call2, ptr %coerce.dive3, align 8
+ %coerce.dive4 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp, i32 0, i32 0
+ %4 = load ptr, ptr %coerce.dive4, align 8
+ call void @_ZNK8co_sleep13await_suspendENSt7__n486116coroutine_handleIvEE(ptr noundef nonnull align 4 dereferenceable(4) %2, ptr %4) #2
+ ret void
+}
+
+; Function Attrs: mustprogress noinline nounwind optnone uwtable
+define linkonce_odr dso_local void @_ZNK8co_sleep13await_suspendENSt7__n486116coroutine_handleIvEE(ptr noundef nonnull align 4 dereferenceable(4) %this, ptr %h.coerce) #7 comdat align 2 {
+entry:
+ %h = alloca %"struct.std::__n4861::coroutine_handle", align 8
+ %this.addr = alloca ptr, align 8
+ %coerce.dive = getelementptr inbounds nuw %"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
+ %this1 = load ptr, ptr %this.addr, align 8
+ ret void
+}
+
+; Function Attrs: mustprogress noinline nounwind optnone uwtable
+define linkonce_odr dso_local void @_ZNK8co_sleep12await_resumeEv(ptr noundef nonnull align 4 dereferenceable(4) %this) #7 comdat align 2 {
+entry:
+ %this.addr = alloca ptr, align 8
+ store ptr %this, ptr %this.addr, align 8
+ %this1 = load ptr, ptr %this.addr, align 8
+ ret void
+}
+
+; Function Attrs: mustprogress noinline nounwind optnone uwtable
+define linkonce_odr dso_local void @_ZN4Task12promise_type19unhandled_exceptionEv(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
+ %this1 = load ptr, ptr %this.addr, align 8
+ ret void
+}
+
+declare dso_local void @__cxa_end_catch()
+
+; Function Attrs: mustprogress noinline nounwind optnone uwtable
+define linkonce_odr dso_local void @_ZN4Task12promise_type13final_suspendEv(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
+ %this1 = load ptr, ptr %this.addr, align 8
+ ret void
+}
+
+; Function Attrs: mustprogress noinline nounwind optnone 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
+ %this1 = load ptr, ptr %this.addr, align 8
+ ret i1 false
+}
+
+; Function Attrs: alwaysinline mustprogress
+define internal void @_Z3foov.__await_suspend_wrapper__final(ptr noundef nonnull %0, ptr noundef %1) #9 {
+entry:
+ %.addr = alloca ptr, align 8
+ %.addr1 = alloca ptr, align 8
+ %agg.tmp = alloca %"struct.std::__n4861::coroutine_handle", align 8
+ %ref.tmp = alloca %"struct.std::__n4861::coroutine_handle.0", align 8
+ store ptr %0, ptr %.addr, align 8
+ store ptr %1, ptr %.addr1, align 8
+ %2 = load ptr, ptr %.addr, align 8
+ %3 = load ptr, ptr %.addr1, align 8
+ %call = call ptr @_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEE12from_addressEPv(ptr noundef %3) #2
+ %coerce.dive = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %ref.tmp, i32 0, i32 0
+ store ptr %call, ptr %coerce.dive, align 8
+ %call2 = call ptr @_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEcvNS0_IvEEEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp) #2
+ %coerce.dive3 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp, i32 0, i32 0
+ store ptr %call2, ptr %coerce.dive3, align 8
+ %coerce.dive4 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp, i32 0, i32 0
+ %4 = load ptr, ptr %coerce.dive4, align 8
+ call void @_ZNKSt7__n486114suspend_always13await_suspendENS_16coroutine_handleIvEE(ptr noundef nonnull align 1 dereferenceable(1) %2, ptr %4) #2
+ ret void
+}
+
+; Function Attrs: mustprogress noinline nounwind optnone 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", align 8
+ %this.addr = alloca ptr, align 8
+ %coerce.dive = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %0, i32 0, i32 0
+ store ptr %.coerce, ptr %coerce.dive, align 8
+ store ptr %this, ptr %this.addr, align 8
+ %this1 = load ptr, ptr %this.addr, align 8
+ ret void
+}
+
+; Function Attrs: mustprogress noinline nounwind optnone 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
+ %this1 = load ptr, ptr %this.addr, align 8
+ ret void
+}
+
+; Function Attrs: nobuiltin nounwind
+declare dso_local void @_ZdlPvm(ptr noundef, i64 noundef) #10
+
+; Function Attrs: nounwind memory(argmem: read)
+declare ptr @llvm.coro.free(token, ptr readonly captures(none)) #11
+
+; Function Attrs: nounwind
+declare void @llvm.coro.end(ptr, i1, token) #2
+
+; Function Attrs: mustprogress noinline norecurse nounwind optnone uwtable
+define dso_local noundef i32 @main() #12 {
+entry:
+ %undef.agg.tmp = alloca %struct.Task, align 1
+ call void @_Z3foov() #2
+ ret i32 0
+}
+
+; Function Attrs: mustprogress noinline nounwind optnone uwtable
+define linkonce_odr dso_local void @_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %this) unnamed_addr #7 comdat align 2 {
+entry:
+ %this.addr = alloca ptr, align 8
+ store ptr %this, ptr %this.addr, align 8
+ %this1 = load ptr, ptr %this.addr, align 8
+ %_M_fr_ptr = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %this1, i32 0, i32 0
+ store ptr null, ptr %_M_fr_ptr, align 8
+ ret void
+}
+
+; Function Attrs: mustprogress noinline nounwind optnone 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", align 8
+ %__a.addr = alloca ptr, align 8
+ store ptr %__a, ptr %__a.addr, align 8
+ call void @_ZNSt7__n486116coroutine_handleIvEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %retval) #2
+ %0 = load ptr, ptr %__a.addr, align 8
+ %_M_fr_ptr = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %retval, i32 0, i32 0
+ store ptr %0, ptr %_M_fr_ptr, align 8
+ %coerce.dive = getelementptr inbounds nuw %"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 noinline nounwind optnone uwtable
+define linkonce_odr dso_local noundef ptr @_ZNKSt7__n486116coroutine_handleIN4Task12promise_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
+ %this1 = load ptr, ptr %this.addr, align 8
+ %_M_fr_ptr = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %this1, i32 0, i32 0
+ %0 = load ptr, ptr %_M_fr_ptr, align 8
+ ret ptr %0
+}
+
+; Function Attrs: mustprogress noinline nounwind optnone uwtable
+define linkonce_odr dso_local void @_ZNSt7__n486116coroutine_handleIvEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %this) unnamed_addr #7 comdat align 2 {
+entry:
+ %this.addr = alloca ptr, align 8
+ store ptr %this, ptr %this.addr, align 8
+ %this1 = load ptr, ptr %this.addr, align 8
+ %_M_fr_ptr = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %this1, i32 0, i32 0
+ store ptr null, ptr %_M_fr_ptr, align 8
+ ret void
+}
+
+attributes #0 = { mustprogress noinline nounwind optnone presplitcoroutine uwtable "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
+attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: read) }
+attributes #2 = { nounwind }
+attributes #3 = { nobuiltin allocsize(0) "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
+attributes #4 = { nounwind memory(none) }
+attributes #5 = { noinline noreturn nounwind uwtable "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
+attributes #6 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
+attributes #7 = { mustprogress noinline nounwind optnone uwtable "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
+attributes #8 = { nomerge nounwind }
+attributes #9 = { alwaysinline mustprogress "min-legal-vector-width"="0" }
+attributes #10 = { nobuiltin nounwind "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
+attributes #11 = { nounwind memory(argmem: read) }
+attributes #12 = { mustprogress noinline norecurse nounwind optnone uwtable "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
+attributes #13 = { allocsize(0) }
+attributes #14 = { noreturn nounwind }
+
+!llvm.module.flags = !{!0, !1, !2}
+!llvm.ident = !{!3}
+
+!0 = !{i32 1, !"wchar_size", i32 4}
+!1 = !{i32 7, !"uwtable", i32 2}
+!2 = !{i32 7, !"frame-pointer", i32 2}
+!3 = !{!"clang version 22.0.0git (https://github.com/llvm/llvm-project.git 837d8c3f38d82a69e2cd9365ca9bcc82f31628df)"}
>From 1783bc55a0a063a4e449ecc688b094342f8b5ed6 Mon Sep 17 00:00:00 2001
From: h2h <h2h at meta.com>
Date: Mon, 5 Jan 2026 13:38:32 -0800
Subject: [PATCH 4/7] Add PseudoProbeInserter fix and test case
---
llvm/include/llvm/ProfileData/SampleProf.h | 7 +
.../CodeGen/AsmPrinter/PseudoProbePrinter.cpp | 4 +-
llvm/lib/CodeGen/PseudoProbeInserter.cpp | 5 +
.../Inputs/pseudo-probe-coro-debug-fix.cpp | 30 -
.../pseudo-probe-coro-debug-fix.ll | 865 ++++++++++++------
5 files changed, 580 insertions(+), 331 deletions(-)
delete mode 100644 llvm/test/Transforms/SampleProfile/Inputs/pseudo-probe-coro-debug-fix.cpp
diff --git a/llvm/include/llvm/ProfileData/SampleProf.h b/llvm/include/llvm/ProfileData/SampleProf.h
index 594065206ebd8..b75dffaff19f7 100644
--- a/llvm/include/llvm/ProfileData/SampleProf.h
+++ b/llvm/include/llvm/ProfileData/SampleProf.h
@@ -1219,6 +1219,13 @@ class FunctionSamples {
return getCanonicalFnName(FnName, KnownSuffixes, Attr);
}
+ static StringRef getCanonicalCoroFnName(StringRef FnName,
+ StringRef Attr = "selected") {
+ const SmallVector<StringRef, 3> CoroSuffixes{".cleanup", ".destroy",
+ ".resume"};
+ return getCanonicalFnName(FnName, CoroSuffixes, Attr);
+ }
+
static StringRef getCanonicalFnName(StringRef FnName,
ArrayRef<StringRef> Suffixes,
StringRef Attr = "selected") {
diff --git a/llvm/lib/CodeGen/AsmPrinter/PseudoProbePrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/PseudoProbePrinter.cpp
index 2185ed1d8309e..0e316736e90a3 100644
--- a/llvm/lib/CodeGen/AsmPrinter/PseudoProbePrinter.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/PseudoProbePrinter.cpp
@@ -33,15 +33,13 @@ void PseudoProbeHandler::emitPseudoProbe(uint64_t Guid, uint64_t Index,
// When it's done ReversedInlineStack looks like ([66, B], [88, A])
// which means, Function A inlines function B at calliste with a probe id 88,
// and B inlines C at probe 66 where C is represented by Guid.
- static const SmallVector<StringRef, 3> CoroSuffixes{".cleanup", ".destroy",
- ".resume"};
SmallVector<InlineSite, 8> ReversedInlineStack;
auto *InlinedAt = DebugLoc ? DebugLoc->getInlinedAt() : nullptr;
while (InlinedAt) {
auto Name = InlinedAt->getSubprogramLinkageName();
// Strip Coroutine suffixes from CoroSplit Pass, since pseudo probes are
// generated in an earlier stage.
- Name = FunctionSamples::getCanonicalFnName(Name, CoroSuffixes);
+ Name = FunctionSamples::getCanonicalCoroFnName(Name);
// Use caching to avoid redundant md5 computation for build speed.
uint64_t &CallerGuid = NameGuidMap[Name];
if (!CallerGuid)
diff --git a/llvm/lib/CodeGen/PseudoProbeInserter.cpp b/llvm/lib/CodeGen/PseudoProbeInserter.cpp
index c911e8453613d..49c6886312277 100644
--- a/llvm/lib/CodeGen/PseudoProbeInserter.cpp
+++ b/llvm/lib/CodeGen/PseudoProbeInserter.cpp
@@ -21,6 +21,7 @@
#include "llvm/IR/Module.h"
#include "llvm/IR/PseudoProbe.h"
#include "llvm/InitializePasses.h"
+#include "llvm/ProfileData/SampleProf.h"
#define DEBUG_TYPE "pseudo-probe-inserter"
@@ -129,6 +130,10 @@ class PseudoProbeInserter : public MachineFunctionPass {
private:
uint64_t getFuncGUID(Module *M, DILocation *DL) {
auto Name = DL->getSubprogramLinkageName();
+ // CoroSplit Pass will change the debug info with suffixes i.e. `.resume`,
+ // `.destroy`, `.cleanup`. Strip these suffixes to make the GUID consistent
+ // with the pseudo probe
+ Name = FunctionSamples::getCanonicalCoroFnName(Name);
return Function::getGUIDAssumingExternalLinkage(Name);
}
diff --git a/llvm/test/Transforms/SampleProfile/Inputs/pseudo-probe-coro-debug-fix.cpp b/llvm/test/Transforms/SampleProfile/Inputs/pseudo-probe-coro-debug-fix.cpp
deleted file mode 100644
index e2da75345c5e8..0000000000000
--- a/llvm/test/Transforms/SampleProfile/Inputs/pseudo-probe-coro-debug-fix.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <coroutine>
-
-struct co_sleep {
- co_sleep(int n) : delay{n} {}
- constexpr bool await_ready() const noexcept { return false; }
- void await_suspend(std::coroutine_handle<> h) const noexcept {}
- void await_resume() const noexcept {}
- int delay;
-};
-
-
-struct Task {
- struct promise_type {
- promise_type() = default;
- Task get_return_object() { return {}; }
- std::suspend_never initial_suspend() { return {}; }
- std::suspend_always final_suspend() noexcept { return {}; }
- void unhandled_exception() {}
- };
-};
-
-Task foo() noexcept {
- co_await co_sleep{10};
-}
-
-int main() {
- foo();
-}
-
-// clang++ -S -O0 SampleProfile/Inputs/pseudo-probe-coro-debug-fix.cpp -emit-llvm -Xclang -disable-llvm-passes -std=c++20 -o SampleProfile/pseudo-probe-coro-debug-fix.ll
diff --git a/llvm/test/Transforms/SampleProfile/pseudo-probe-coro-debug-fix.ll b/llvm/test/Transforms/SampleProfile/pseudo-probe-coro-debug-fix.ll
index c111123cb3a64..271b665dae435 100644
--- a/llvm/test/Transforms/SampleProfile/pseudo-probe-coro-debug-fix.ll
+++ b/llvm/test/Transforms/SampleProfile/pseudo-probe-coro-debug-fix.ll
@@ -1,114 +1,47 @@
-; RUN: opt < %s -passes='pseudo-probe,cgscc(coro-split),coro-cleanup,early-cse' -mtriple=x86_64 -S -o %t
-; RUN: llc -mtriple=x86_64-- < %t | FileCheck %s
-
-; CHECK: .section .pseudo_probe_desc,"", at progbits
-; CHECK-NEXT: .quad 9191153033785521275
-; CHECK-NEXT: .quad 3378390095374084
-; CHECK-NEXT: .byte 7
-; CHECK-NEXT: .ascii "_Z3foov"
-; CHECK-NEXT: .quad 1080103601501470593
-; CHECK-NEXT: .quad 562954248388607
-; CHECK-NEXT: .byte 22
-; CHECK-NEXT: .ascii "__clang_call_terminate"
-; CHECK-NEXT: .quad -5983175768063907623
-; CHECK-NEXT: .quad 4294967295
-; CHECK-NEXT: .byte 43
-; CHECK-NEXT: .ascii "_ZN4Task12promise_type17get_return_objectEv"
-; CHECK-NEXT: .quad 9223044513579825966
-; CHECK-NEXT: .quad 4294967295
-; CHECK-NEXT: .byte 41
-; CHECK-NEXT: .ascii "_ZN4Task12promise_type15initial_suspendEv"
-; CHECK-NEXT: .quad 3637514160624257742
-; CHECK-NEXT: .quad 4294967295
-; CHECK-NEXT: .byte 44
-; CHECK-NEXT: .ascii "_ZNKSt7__n486113suspend_never11await_readyEv"
-; CHECK-NEXT: .quad 4804537283846854890
-; CHECK-NEXT: .quad 844429225099263
-; CHECK-NEXT: .byte 37
-; CHECK-NEXT: .ascii "_Z3foov.__await_suspend_wrapper__init"
-; CHECK-NEXT: .quad 7163718281371254139
-; CHECK-NEXT: .quad 4294967295
-; CHECK-NEXT: .byte 70
-; CHECK-NEXT: .ascii "_ZNKSt7__n486113suspend_never13await_suspendENS_16coroutine_handleIvEE"
-; CHECK-NEXT: .quad -8352551662853914866
-; CHECK-NEXT: .quad 281479271677951
-; CHECK-NEXT: .byte 71
-; CHECK-NEXT: .ascii "_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEE12from_addressEPv"
-; CHECK-NEXT: .quad -4287562419115964352
-; CHECK-NEXT: .quad 562954248388607
-; CHECK-NEXT: .byte 67
-; CHECK-NEXT: .ascii "_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEcvNS0_IvEEEv"
-; CHECK-NEXT: .quad -3595869838865620152
-; CHECK-NEXT: .quad 4294967295
-; CHECK-NEXT: .byte 45
-; CHECK-NEXT: .ascii "_ZNKSt7__n486113suspend_never12await_resumeEv"
-; CHECK-NEXT: .quad -4360651593791024226
-; CHECK-NEXT: .quad 4294967295
-; CHECK-NEXT: .byte 16
-; CHECK-NEXT: .ascii "_ZN8co_sleepC2Ei"
-; CHECK-NEXT: .quad 194070738489204334
-; CHECK-NEXT: .quad 4294967295
-; CHECK-NEXT: .byte 28
-; CHECK-NEXT: .ascii "_ZNK8co_sleep11await_readyEv"
-; CHECK-NEXT: .quad -6207857456115168182
-; CHECK-NEXT: .quad 844429225099263
-; CHECK-NEXT: .byte 38
-; CHECK-NEXT: .ascii "_Z3foov.__await_suspend_wrapper__await"
-; CHECK-NEXT: .quad -707552474449578794
-; CHECK-NEXT: .quad 4294967295
-; CHECK-NEXT: .byte 62
-; CHECK-NEXT: .ascii "_ZNK8co_sleep13await_suspendENSt7__n486116coroutine_handleIvEE"
-; CHECK-NEXT: .quad 2482723163529722706
-; CHECK-NEXT: .quad 4294967295
-; CHECK-NEXT: .byte 29
-; CHECK-NEXT: .ascii "_ZNK8co_sleep12await_resumeEv"
-; CHECK-NEXT: .quad 2751305985409977170
-; CHECK-NEXT: .quad 4294967295
-; CHECK-NEXT: .byte 45
-; CHECK-NEXT: .ascii "_ZN4Task12promise_type19unhandled_exceptionEv"
-; CHECK-NEXT: .quad 5392659810511438807
-; CHECK-NEXT: .quad 4294967295
-; CHECK-NEXT: .byte 39
-; CHECK-NEXT: .ascii "_ZN4Task12promise_type13final_suspendEv"
-; CHECK-NEXT: .quad -5299639869497052884
-; CHECK-NEXT: .quad 4294967295
-; CHECK-NEXT: .byte 45
-; CHECK-NEXT: .ascii "_ZNKSt7__n486114suspend_always11await_readyEv"
-; CHECK-NEXT: .quad -3505192329872532516
-; CHECK-NEXT: .quad 844429225099263
-; CHECK-NEXT: .byte 38
-; CHECK-NEXT: .ascii "_Z3foov.__await_suspend_wrapper__final"
-; CHECK-NEXT: .quad -7204990471824719232
-; CHECK-NEXT: .quad 4294967295
-; CHECK-NEXT: .byte 71
-; CHECK-NEXT: .ascii "_ZNKSt7__n486114suspend_always13await_suspendENS_16coroutine_handleIvEE"
-; CHECK-NEXT: .quad 1383777007208917084
-; CHECK-NEXT: .quad 4294967295
-; CHECK-NEXT: .byte 46
-; CHECK-NEXT: .ascii "_ZNKSt7__n486114suspend_always12await_resumeEv"
-; CHECK-NEXT: .quad -2624081020897602054
-; CHECK-NEXT: .quad 281479271677951
-; CHECK-NEXT: .byte 4
-; CHECK-NEXT: .ascii "main"
-; CHECK-NEXT: .quad 8552724234615586455
-; CHECK-NEXT: .quad 4294967295
-; CHECK-NEXT: .byte 58
-; CHECK-NEXT: .ascii "_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEEC2Ev"
-; CHECK-NEXT: .quad 8637232519489628998
-; CHECK-NEXT: .quad 281479271677951
-; CHECK-NEXT: .byte 51
-; CHECK-NEXT: .ascii "_ZNSt7__n486116coroutine_handleIvE12from_addressEPv"
-; CHECK-NEXT: .quad 8181587454597930979
-; CHECK-NEXT: .quad 4294967295
-; CHECK-NEXT: .byte 65
-; CHECK-NEXT: .ascii "_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEE7addressEv"
-; CHECK-NEXT: .quad 2426770966769951745
-; CHECK-NEXT: .quad 4294967295
-; CHECK-NEXT: .byte 38
-; CHECK-NEXT: .ascii "_ZNSt7__n486116coroutine_handleIvEC2Ev"
-
-; ModuleID = 'SampleProfile/Inputs/pseudo-probe-coro-debug-fix.cpp'
-source_filename = "SampleProfile/Inputs/pseudo-probe-coro-debug-fix.cpp"
+; RUN: opt < %s -passes='pseudo-probe,cgscc(coro-split),coro-cleanup,always-inline,early-cse' -mtriple=x86_64 -pass-remarks=inline -S -o %t.ll
+; RUN: llc -mtriple=x86_64 -stop-after=pseudo-probe-inserter < %t.ll --filetype=asm -o - | FileCheck -check-prefix=MIR %s
+; MIR-NOT: PSEUDO_PROBE 4448042984153125393,
+; MIR-NOT: PSEUDO_PROBE 3532999944647676065,
+; MIR-NOT: PSEUDO_PROBE -7235034626494519075,
+
+; RUN: llc -mtriple=x86_64 < %t.ll --filetype=obj -o %t.obj
+; RUN: obj2yaml %t.obj | FileCheck -check-prefix=OBJ --match-full-lines %s
+; OBJ: - Name: .pseudo_probe_desc{{$}}
+; OBJ-NEXT: Type: SHT_PROGBITS{{$}}
+; OBJ-NEXT: AddressAlign: 0x1{{$}}
+; OBJ-NEXT: Content: 7B340AC7FC888D7F{{[0-9A-F]+$}}
+
+
+; Original source code:
+; clang++ -S -g -O0 SampleProfile/Inputs/pseudo-probe-coro-debug-fix.cpp -emit-llvm -Xclang -disable-llvm-passes -std=c++20 -o SampleProfile/pseudo-probe-coro-debug-fix.ll
+;
+; #include <coroutine>
+; struct co_sleep {
+; co_sleep(int n) : delay{n} {}
+; constexpr bool await_ready() const noexcept { return false; }
+; void await_suspend(std::coroutine_handle<> h) const noexcept {}
+; void await_resume() const noexcept {}
+; int delay;
+; };
+; struct Task {
+; struct promise_type {
+; promise_type() = default;
+; Task get_return_object() { return {}; }
+; std::suspend_never initial_suspend() { return {}; }
+; std::suspend_always final_suspend() noexcept { return {}; }
+; void unhandled_exception() {}
+; };
+; };
+; Task foo() noexcept {
+; co_await co_sleep{10};
+; }
+;
+; int main() {
+; foo();
+; }
+
+; ModuleID = 'pseudo-probe-coro-debug-fix.cpp'
+source_filename = "pseudo-probe-coro-debug-fix.cpp"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-redhat-linux-gnu"
@@ -163,7 +96,7 @@ $_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEE7addressEv = comdat any
$_ZNSt7__n486116coroutine_handleIvEC2Ev = comdat any
; Function Attrs: mustprogress noinline nounwind optnone presplitcoroutine uwtable
-define dso_local void @_Z3foov() #0 personality ptr @__gxx_personality_v0 {
+define dso_local void @_Z3foov() #0 personality ptr @__gxx_personality_v0 !dbg !156 {
entry:
%__promise = alloca %"struct.Task::promise_type", align 1
%undef.agg.tmp = alloca %struct.Task, align 1
@@ -174,161 +107,162 @@ entry:
%ehselector.slot = alloca i32, align 4
%ref.tmp13 = alloca %"struct.std::__n4861::suspend_always", align 1
%undef.agg.tmp14 = alloca %"struct.std::__n4861::suspend_always", align 1
- %0 = call token @llvm.coro.id(i32 16, ptr %__promise, ptr null, ptr null)
- %1 = call i1 @llvm.coro.alloc(token %0)
- br i1 %1, label %coro.alloc, label %coro.init
+ %0 = call token @llvm.coro.id(i32 16, ptr %__promise, ptr null, ptr null), !dbg !159
+ %1 = call i1 @llvm.coro.alloc(token %0), !dbg !159
+ br i1 %1, label %coro.alloc, label %coro.init, !dbg !159
coro.alloc: ; preds = %entry
- %2 = call i64 @llvm.coro.size.i64()
+ %2 = call i64 @llvm.coro.size.i64(), !dbg !160
%call = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef %2) #13
- to label %invoke.cont unwind label %terminate.lpad
+ to label %invoke.cont unwind label %terminate.lpad, !dbg !160
invoke.cont: ; preds = %coro.alloc
- br label %coro.init
+ br label %coro.init, !dbg !159
coro.init: ; preds = %invoke.cont, %entry
- %3 = phi ptr [ null, %entry ], [ %call, %invoke.cont ]
- %4 = call ptr @llvm.coro.begin(token %0, ptr %3)
- call void @llvm.lifetime.start.p0(ptr %__promise) #2
+ %3 = phi ptr [ null, %entry ], [ %call, %invoke.cont ], !dbg !159
+ %4 = call ptr @llvm.coro.begin(token %0, ptr %3), !dbg !159
+ call void @llvm.lifetime.start.p0(ptr %__promise) #2, !dbg !160
+ #dbg_declare(ptr %__promise, !161, !DIExpression(), !167)
invoke void @_ZN4Task12promise_type17get_return_objectEv(ptr noundef nonnull align 1 dereferenceable(1) %__promise)
- to label %invoke.cont1 unwind label %terminate.lpad
+ to label %invoke.cont1 unwind label %terminate.lpad, !dbg !160
invoke.cont1: ; preds = %coro.init
- call void @llvm.lifetime.start.p0(ptr %ref.tmp) #2
+ call void @llvm.lifetime.start.p0(ptr %ref.tmp) #2, !dbg !160
invoke void @_ZN4Task12promise_type15initial_suspendEv(ptr noundef nonnull align 1 dereferenceable(1) %__promise)
- to label %invoke.cont2 unwind label %terminate.lpad
+ to label %invoke.cont2 unwind label %terminate.lpad, !dbg !160
invoke.cont2: ; preds = %invoke.cont1
- %call4 = call noundef zeroext i1 @_ZNKSt7__n486113suspend_never11await_readyEv(ptr noundef nonnull align 1 dereferenceable(1) %ref.tmp) #2
- br i1 %call4, label %init.ready, label %init.suspend
+ %call4 = call noundef zeroext i1 @_ZNKSt7__n486113suspend_never11await_readyEv(ptr noundef nonnull align 1 dereferenceable(1) %ref.tmp) #2, !dbg !160
+ br i1 %call4, label %init.ready, label %init.suspend, !dbg !160
init.suspend: ; preds = %invoke.cont2
- %5 = call token @llvm.coro.save(ptr null)
- call void @llvm.coro.await.suspend.void(ptr %ref.tmp, ptr %4, ptr @_Z3foov.__await_suspend_wrapper__init) #2
- %6 = call i8 @llvm.coro.suspend(token %5, i1 false)
+ %5 = call token @llvm.coro.save(ptr null), !dbg !160
+ call void @llvm.coro.await.suspend.void(ptr %ref.tmp, ptr %4, ptr @_Z3foov.__await_suspend_wrapper__init) #2, !dbg !160
+ %6 = call i8 @llvm.coro.suspend(token %5, i1 false), !dbg !160
switch i8 %6, label %coro.ret [
i8 0, label %init.ready
i8 1, label %init.cleanup
- ]
+ ], !dbg !160
init.cleanup: ; preds = %init.suspend
- br label %cleanup
+ br label %cleanup, !dbg !160
init.ready: ; preds = %init.suspend, %invoke.cont2
- call void @_ZNKSt7__n486113suspend_never12await_resumeEv(ptr noundef nonnull align 1 dereferenceable(1) %ref.tmp) #2
- br label %cleanup
+ call void @_ZNKSt7__n486113suspend_never12await_resumeEv(ptr noundef nonnull align 1 dereferenceable(1) %ref.tmp) #2, !dbg !160
+ br label %cleanup, !dbg !160
cleanup: ; preds = %init.ready, %init.cleanup
%cleanup.dest.slot.0 = phi i32 [ 0, %init.ready ], [ 2, %init.cleanup ]
- call void @llvm.lifetime.end.p0(ptr %ref.tmp) #2
+ call void @llvm.lifetime.end.p0(ptr %ref.tmp) #2, !dbg !160
switch i32 %cleanup.dest.slot.0, label %cleanup19 [
i32 0, label %cleanup.cont
]
cleanup.cont: ; preds = %cleanup
- call void @llvm.lifetime.start.p0(ptr %ref.tmp5) #2
+ call void @llvm.lifetime.start.p0(ptr %ref.tmp5) #2, !dbg !168
invoke void @_ZN8co_sleepC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %ref.tmp5, i32 noundef 10)
- to label %invoke.cont6 unwind label %lpad
+ to label %invoke.cont6 unwind label %lpad, !dbg !168
invoke.cont6: ; preds = %cleanup.cont
- %call7 = call noundef zeroext i1 @_ZNK8co_sleep11await_readyEv(ptr noundef nonnull align 4 dereferenceable(4) %ref.tmp5) #2
- br i1 %call7, label %await.ready, label %await.suspend
+ %call7 = call noundef zeroext i1 @_ZNK8co_sleep11await_readyEv(ptr noundef nonnull align 4 dereferenceable(4) %ref.tmp5) #2, !dbg !168
+ br i1 %call7, label %await.ready, label %await.suspend, !dbg !170
await.suspend: ; preds = %invoke.cont6
- %7 = call token @llvm.coro.save(ptr null)
- call void @llvm.coro.await.suspend.void(ptr %ref.tmp5, ptr %4, ptr @_Z3foov.__await_suspend_wrapper__await) #2
- %8 = call i8 @llvm.coro.suspend(token %7, i1 false)
+ %7 = call token @llvm.coro.save(ptr null), !dbg !170
+ call void @llvm.coro.await.suspend.void(ptr %ref.tmp5, ptr %4, ptr @_Z3foov.__await_suspend_wrapper__await) #2, !dbg !170
+ %8 = call i8 @llvm.coro.suspend(token %7, i1 false), !dbg !170
switch i8 %8, label %coro.ret [
i8 0, label %await.ready
i8 1, label %await.cleanup
- ]
+ ], !dbg !170
await.cleanup: ; preds = %await.suspend
- br label %cleanup8
+ br label %cleanup8, !dbg !170
lpad: ; preds = %cleanup.cont
%9 = landingpad { ptr, i32 }
- catch ptr null
- %10 = extractvalue { ptr, i32 } %9, 0
- store ptr %10, ptr %exn.slot, align 8
- %11 = extractvalue { ptr, i32 } %9, 1
- store i32 %11, ptr %ehselector.slot, align 4
- call void @llvm.lifetime.end.p0(ptr %ref.tmp5) #2
- br label %catch
+ catch ptr null, !dbg !171
+ %10 = extractvalue { ptr, i32 } %9, 0, !dbg !171
+ store ptr %10, ptr %exn.slot, align 8, !dbg !171
+ %11 = extractvalue { ptr, i32 } %9, 1, !dbg !171
+ store i32 %11, ptr %ehselector.slot, align 4, !dbg !171
+ call void @llvm.lifetime.end.p0(ptr %ref.tmp5) #2, !dbg !170
+ br label %catch, !dbg !170
catch: ; preds = %lpad
- %exn = load ptr, ptr %exn.slot, align 8
- %12 = call ptr @__cxa_begin_catch(ptr %exn) #2
+ %exn = load ptr, ptr %exn.slot, align 8, !dbg !171
+ %12 = call ptr @__cxa_begin_catch(ptr %exn) #2, !dbg !171
invoke void @_ZN4Task12promise_type19unhandled_exceptionEv(ptr noundef nonnull align 1 dereferenceable(1) %__promise)
- to label %invoke.cont11 unwind label %terminate.lpad
+ to label %invoke.cont11 unwind label %terminate.lpad, !dbg !160
invoke.cont11: ; preds = %catch
invoke void @__cxa_end_catch()
- to label %invoke.cont12 unwind label %terminate.lpad
+ to label %invoke.cont12 unwind label %terminate.lpad, !dbg !160
invoke.cont12: ; preds = %invoke.cont11
- br label %try.cont
+ br label %try.cont, !dbg !160
try.cont: ; preds = %invoke.cont12, %cleanup.cont10
- br label %coro.final
+ br label %coro.final, !dbg !160
coro.final: ; preds = %try.cont
- call void @llvm.lifetime.start.p0(ptr %ref.tmp13) #2
- call void @_ZN4Task12promise_type13final_suspendEv(ptr noundef nonnull align 1 dereferenceable(1) %__promise) #2
- %call15 = call noundef zeroext i1 @_ZNKSt7__n486114suspend_always11await_readyEv(ptr noundef nonnull align 1 dereferenceable(1) %ref.tmp13) #2
- br i1 %call15, label %final.ready, label %final.suspend
+ call void @llvm.lifetime.start.p0(ptr %ref.tmp13) #2, !dbg !160
+ call void @_ZN4Task12promise_type13final_suspendEv(ptr noundef nonnull align 1 dereferenceable(1) %__promise) #2, !dbg !160
+ %call15 = call noundef zeroext i1 @_ZNKSt7__n486114suspend_always11await_readyEv(ptr noundef nonnull align 1 dereferenceable(1) %ref.tmp13) #2, !dbg !160
+ br i1 %call15, label %final.ready, label %final.suspend, !dbg !160
final.suspend: ; preds = %coro.final
- %13 = call token @llvm.coro.save(ptr null)
- call void @llvm.coro.await.suspend.void(ptr %ref.tmp13, ptr %4, ptr @_Z3foov.__await_suspend_wrapper__final) #2
- %14 = call i8 @llvm.coro.suspend(token %13, i1 true)
+ %13 = call token @llvm.coro.save(ptr null), !dbg !160
+ call void @llvm.coro.await.suspend.void(ptr %ref.tmp13, ptr %4, ptr @_Z3foov.__await_suspend_wrapper__final) #2, !dbg !160
+ %14 = call i8 @llvm.coro.suspend(token %13, i1 true), !dbg !160
switch i8 %14, label %coro.ret [
i8 0, label %final.ready
i8 1, label %final.cleanup
- ]
+ ], !dbg !160
final.cleanup: ; preds = %final.suspend
- br label %cleanup16
+ br label %cleanup16, !dbg !160
await.ready: ; preds = %await.suspend, %invoke.cont6
- call void @_ZNK8co_sleep12await_resumeEv(ptr noundef nonnull align 4 dereferenceable(4) %ref.tmp5) #2
- br label %cleanup8
+ call void @_ZNK8co_sleep12await_resumeEv(ptr noundef nonnull align 4 dereferenceable(4) %ref.tmp5) #2, !dbg !168
+ br label %cleanup8, !dbg !170
cleanup8: ; preds = %await.ready, %await.cleanup
%cleanup.dest.slot.1 = phi i32 [ 0, %await.ready ], [ 2, %await.cleanup ]
- call void @llvm.lifetime.end.p0(ptr %ref.tmp5) #2
+ call void @llvm.lifetime.end.p0(ptr %ref.tmp5) #2, !dbg !170
switch i32 %cleanup.dest.slot.1, label %cleanup19 [
i32 0, label %cleanup.cont10
]
cleanup.cont10: ; preds = %cleanup8
- br label %try.cont
+ br label %try.cont, !dbg !171
final.ready: ; preds = %final.suspend, %coro.final
- call void @_ZNKSt7__n486114suspend_always12await_resumeEv(ptr noundef nonnull align 1 dereferenceable(1) %ref.tmp13) #2
- br label %cleanup16
+ call void @_ZNKSt7__n486114suspend_always12await_resumeEv(ptr noundef nonnull align 1 dereferenceable(1) %ref.tmp13) #2, !dbg !160
+ br label %cleanup16, !dbg !160
cleanup16: ; preds = %final.ready, %final.cleanup
%cleanup.dest.slot.2 = phi i32 [ 0, %final.ready ], [ 2, %final.cleanup ]
- call void @llvm.lifetime.end.p0(ptr %ref.tmp13) #2
+ call void @llvm.lifetime.end.p0(ptr %ref.tmp13) #2, !dbg !160
switch i32 %cleanup.dest.slot.2, label %cleanup19 [
i32 0, label %cleanup.cont18
]
cleanup.cont18: ; preds = %cleanup16
- br label %cleanup19
+ br label %cleanup19, !dbg !160
cleanup19: ; preds = %cleanup.cont18, %cleanup16, %cleanup8, %cleanup
- %cleanup.dest.slot.3 = phi i32 [ %cleanup.dest.slot.0, %cleanup ], [ %cleanup.dest.slot.1, %cleanup8 ], [ %cleanup.dest.slot.2, %cleanup16 ], [ 0, %cleanup.cont18 ]
- call void @llvm.lifetime.end.p0(ptr %__promise) #2
- %15 = call ptr @llvm.coro.free(token %0, ptr %4)
- %16 = icmp ne ptr %15, null
- br i1 %16, label %coro.free, label %after.coro.free
+ %cleanup.dest.slot.3 = phi i32 [ %cleanup.dest.slot.0, %cleanup ], [ %cleanup.dest.slot.1, %cleanup8 ], [ %cleanup.dest.slot.2, %cleanup16 ], [ 0, %cleanup.cont18 ], !dbg !167
+ call void @llvm.lifetime.end.p0(ptr %__promise) #2, !dbg !160
+ %15 = call ptr @llvm.coro.free(token %0, ptr %4), !dbg !160
+ %16 = icmp ne ptr %15, null, !dbg !160
+ br i1 %16, label %coro.free, label %after.coro.free, !dbg !160
coro.free: ; preds = %cleanup19
- %17 = call i64 @llvm.coro.size.i64()
- call void @_ZdlPvm(ptr noundef %15, i64 noundef %17) #2
- br label %after.coro.free
+ %17 = call i64 @llvm.coro.size.i64(), !dbg !160
+ call void @_ZdlPvm(ptr noundef %15, i64 noundef %17) #2, !dbg !160
+ br label %after.coro.free, !dbg !160
after.coro.free: ; preds = %cleanup19, %coro.free
switch i32 %cleanup.dest.slot.3, label %unreachable [
@@ -337,18 +271,18 @@ after.coro.free: ; preds = %cleanup19, %coro.fr
]
cleanup.cont22: ; preds = %after.coro.free
- br label %coro.ret
+ br label %coro.ret, !dbg !160
coro.ret: ; preds = %cleanup.cont22, %after.coro.free, %final.suspend, %await.suspend, %init.suspend
- call void @llvm.coro.end(ptr null, i1 false, token none)
- ret void
+ call void @llvm.coro.end(ptr null, i1 false, token none), !dbg !160
+ ret void, !dbg !160
terminate.lpad: ; preds = %invoke.cont11, %catch, %invoke.cont1, %coro.init, %coro.alloc
%18 = landingpad { ptr, i32 }
- catch ptr null
- %19 = extractvalue { ptr, i32 } %18, 0
- call void @__clang_call_terminate(ptr %19) #14
- unreachable
+ catch ptr null, !dbg !160
+ %19 = extractvalue { ptr, i32 } %18, 0, !dbg !160
+ call void @__clang_call_terminate(ptr %19) #14, !dbg !160
+ unreachable, !dbg !160
unreachable: ; preds = %after.coro.free
unreachable
@@ -386,99 +320,109 @@ declare ptr @llvm.coro.begin(token, ptr writeonly) #2
declare void @llvm.lifetime.start.p0(ptr captures(none)) #6
; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local void @_ZN4Task12promise_type17get_return_objectEv(ptr noundef nonnull align 1 dereferenceable(1) %this) #7 comdat align 2 {
+define linkonce_odr dso_local void @_ZN4Task12promise_type17get_return_objectEv(ptr noundef nonnull align 1 dereferenceable(1) %this) #7 comdat align 2 !dbg !172 {
entry:
%this.addr = alloca ptr, align 8
store ptr %this, ptr %this.addr, align 8
+ #dbg_declare(ptr %this.addr, !173, !DIExpression(), !175)
%this1 = load ptr, ptr %this.addr, align 8
- ret void
+ ret void, !dbg !176
}
; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local void @_ZN4Task12promise_type15initial_suspendEv(ptr noundef nonnull align 1 dereferenceable(1) %this) #7 comdat align 2 {
+define linkonce_odr dso_local void @_ZN4Task12promise_type15initial_suspendEv(ptr noundef nonnull align 1 dereferenceable(1) %this) #7 comdat align 2 !dbg !177 {
entry:
%this.addr = alloca ptr, align 8
store ptr %this, ptr %this.addr, align 8
+ #dbg_declare(ptr %this.addr, !178, !DIExpression(), !179)
%this1 = load ptr, ptr %this.addr, align 8
- ret void
+ ret void, !dbg !180
}
; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local noundef zeroext i1 @_ZNKSt7__n486113suspend_never11await_readyEv(ptr noundef nonnull align 1 dereferenceable(1) %this) #7 comdat align 2 {
+define linkonce_odr dso_local noundef zeroext i1 @_ZNKSt7__n486113suspend_never11await_readyEv(ptr noundef nonnull align 1 dereferenceable(1) %this) #7 comdat align 2 !dbg !181 {
entry:
%this.addr = alloca ptr, align 8
store ptr %this, ptr %this.addr, align 8
+ #dbg_declare(ptr %this.addr, !182, !DIExpression(), !184)
%this1 = load ptr, ptr %this.addr, align 8
- ret i1 true
+ ret i1 true, !dbg !185
}
; Function Attrs: nomerge nounwind
declare token @llvm.coro.save(ptr) #8
; Function Attrs: alwaysinline mustprogress
-define internal void @_Z3foov.__await_suspend_wrapper__init(ptr noundef nonnull %0, ptr noundef %1) #9 {
+define internal void @_Z3foov.__await_suspend_wrapper__init(ptr noundef nonnull %0, ptr noundef %1) #9 !dbg !186 {
entry:
%.addr = alloca ptr, align 8
%.addr1 = alloca ptr, align 8
%agg.tmp = alloca %"struct.std::__n4861::coroutine_handle", align 8
%ref.tmp = alloca %"struct.std::__n4861::coroutine_handle.0", align 8
store ptr %0, ptr %.addr, align 8
+ #dbg_declare(ptr %.addr, !188, !DIExpression(), !189)
store ptr %1, ptr %.addr1, align 8
+ #dbg_declare(ptr %.addr1, !190, !DIExpression(), !189)
%2 = load ptr, ptr %.addr, align 8
%3 = load ptr, ptr %.addr1, align 8
- %call = call ptr @_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEE12from_addressEPv(ptr noundef %3) #2
- %coerce.dive = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %ref.tmp, i32 0, i32 0
- store ptr %call, ptr %coerce.dive, align 8
- %call2 = call ptr @_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEcvNS0_IvEEEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp) #2
- %coerce.dive3 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp, i32 0, i32 0
- store ptr %call2, ptr %coerce.dive3, align 8
- %coerce.dive4 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp, i32 0, i32 0
- %4 = load ptr, ptr %coerce.dive4, align 8
- call void @_ZNKSt7__n486113suspend_never13await_suspendENS_16coroutine_handleIvEE(ptr noundef nonnull align 1 dereferenceable(1) %2, ptr %4) #2
- ret void
+ %call = call ptr @_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEE12from_addressEPv(ptr noundef %3) #2, !dbg !191
+ %coerce.dive = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %ref.tmp, i32 0, i32 0, !dbg !191
+ store ptr %call, ptr %coerce.dive, align 8, !dbg !191
+ %call2 = call ptr @_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEcvNS0_IvEEEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp) #2, !dbg !191
+ %coerce.dive3 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp, i32 0, i32 0, !dbg !191
+ store ptr %call2, ptr %coerce.dive3, align 8, !dbg !191
+ %coerce.dive4 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp, i32 0, i32 0, !dbg !191
+ %4 = load ptr, ptr %coerce.dive4, align 8, !dbg !191
+ call void @_ZNKSt7__n486113suspend_never13await_suspendENS_16coroutine_handleIvEE(ptr noundef nonnull align 1 dereferenceable(1) %2, ptr %4) #2, !dbg !191
+ ret void, !dbg !191
}
; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local void @_ZNKSt7__n486113suspend_never13await_suspendENS_16coroutine_handleIvEE(ptr noundef nonnull align 1 dereferenceable(1) %this, ptr %.coerce) #7 comdat align 2 {
+define linkonce_odr dso_local void @_ZNKSt7__n486113suspend_never13await_suspendENS_16coroutine_handleIvEE(ptr noundef nonnull align 1 dereferenceable(1) %this, ptr %.coerce) #7 comdat align 2 !dbg !192 {
entry:
%0 = alloca %"struct.std::__n4861::coroutine_handle", align 8
%this.addr = alloca ptr, align 8
%coerce.dive = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %0, i32 0, i32 0
store ptr %.coerce, ptr %coerce.dive, align 8
store ptr %this, ptr %this.addr, align 8
+ #dbg_declare(ptr %this.addr, !193, !DIExpression(), !194)
+ #dbg_declare(ptr %0, !195, !DIExpression(), !196)
%this1 = load ptr, ptr %this.addr, align 8
- ret void
+ ret void, !dbg !197
}
; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local ptr @_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEE12from_addressEPv(ptr noundef %__a) #7 comdat align 2 {
+define linkonce_odr dso_local ptr @_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEE12from_addressEPv(ptr noundef %__a) #7 comdat align 2 !dbg !198 {
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
- call void @_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %retval) #2
- %0 = load ptr, ptr %__a.addr, align 8
- %_M_fr_ptr = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %retval, i32 0, i32 0
- store ptr %0, ptr %_M_fr_ptr, align 8
- %coerce.dive = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %retval, i32 0, i32 0
- %1 = load ptr, ptr %coerce.dive, align 8
- ret ptr %1
+ #dbg_declare(ptr %__a.addr, !199, !DIExpression(), !200)
+ #dbg_declare(ptr %retval, !201, !DIExpression(), !202)
+ call void @_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %retval) #2, !dbg !202
+ %0 = load ptr, ptr %__a.addr, align 8, !dbg !203
+ %_M_fr_ptr = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %retval, i32 0, i32 0, !dbg !204
+ store ptr %0, ptr %_M_fr_ptr, align 8, !dbg !205
+ %coerce.dive = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %retval, i32 0, i32 0, !dbg !206
+ %1 = load ptr, ptr %coerce.dive, align 8, !dbg !206
+ ret ptr %1, !dbg !206
}
; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local ptr @_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEcvNS0_IvEEEv(ptr noundef nonnull align 8 dereferenceable(8) %this) #7 comdat align 2 {
+define linkonce_odr dso_local ptr @_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEcvNS0_IvEEEv(ptr noundef nonnull align 8 dereferenceable(8) %this) #7 comdat align 2 !dbg !207 {
entry:
%retval = alloca %"struct.std::__n4861::coroutine_handle", align 8
%this.addr = alloca ptr, align 8
store ptr %this, ptr %this.addr, align 8
+ #dbg_declare(ptr %this.addr, !208, !DIExpression(), !210)
%this1 = load ptr, ptr %this.addr, align 8
- %call = call noundef ptr @_ZNKSt7__n486116coroutine_handleIN4Task12promise_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 nuw %"struct.std::__n4861::coroutine_handle", ptr %retval, i32 0, i32 0
- store ptr %call2, ptr %coerce.dive, align 8
- %coerce.dive3 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %retval, i32 0, i32 0
- %0 = load ptr, ptr %coerce.dive3, align 8
- ret ptr %0
+ %call = call noundef ptr @_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEE7addressEv(ptr noundef nonnull align 8 dereferenceable(8) %this1) #2, !dbg !211
+ %call2 = call ptr @_ZNSt7__n486116coroutine_handleIvE12from_addressEPv(ptr noundef %call) #2, !dbg !212
+ %coerce.dive = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %retval, i32 0, i32 0, !dbg !212
+ store ptr %call2, ptr %coerce.dive, align 8, !dbg !212
+ %coerce.dive3 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %retval, i32 0, i32 0, !dbg !213
+ %0 = load ptr, ptr %coerce.dive3, align 8, !dbg !213
+ ret ptr %0, !dbg !213
}
declare void @llvm.coro.await.suspend.void(ptr, ptr, ptr)
@@ -487,155 +431,172 @@ declare void @llvm.coro.await.suspend.void(ptr, ptr, ptr)
declare i8 @llvm.coro.suspend(token, i1) #2
; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local void @_ZNKSt7__n486113suspend_never12await_resumeEv(ptr noundef nonnull align 1 dereferenceable(1) %this) #7 comdat align 2 {
+define linkonce_odr dso_local void @_ZNKSt7__n486113suspend_never12await_resumeEv(ptr noundef nonnull align 1 dereferenceable(1) %this) #7 comdat align 2 !dbg !214 {
entry:
%this.addr = alloca ptr, align 8
store ptr %this, ptr %this.addr, align 8
+ #dbg_declare(ptr %this.addr, !215, !DIExpression(), !216)
%this1 = load ptr, ptr %this.addr, align 8
- ret void
+ ret void, !dbg !217
}
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(ptr captures(none)) #6
; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local void @_ZN8co_sleepC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %this, i32 noundef %n) unnamed_addr #7 comdat align 2 {
+define linkonce_odr dso_local void @_ZN8co_sleepC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %this, i32 noundef %n) unnamed_addr #7 comdat align 2 !dbg !218 {
entry:
%this.addr = alloca ptr, align 8
%n.addr = alloca i32, align 4
store ptr %this, ptr %this.addr, align 8
+ #dbg_declare(ptr %this.addr, !219, !DIExpression(), !221)
store i32 %n, ptr %n.addr, align 4
+ #dbg_declare(ptr %n.addr, !222, !DIExpression(), !223)
%this1 = load ptr, ptr %this.addr, align 8
- %delay = getelementptr inbounds nuw %struct.co_sleep, ptr %this1, i32 0, i32 0
- %0 = load i32, ptr %n.addr, align 4
- store i32 %0, ptr %delay, align 4
- ret void
+ %delay = getelementptr inbounds nuw %struct.co_sleep, ptr %this1, i32 0, i32 0, !dbg !224
+ %0 = load i32, ptr %n.addr, align 4, !dbg !225
+ store i32 %0, ptr %delay, align 4, !dbg !224
+ ret void, !dbg !226
}
; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local noundef zeroext i1 @_ZNK8co_sleep11await_readyEv(ptr noundef nonnull align 4 dereferenceable(4) %this) #7 comdat align 2 {
+define linkonce_odr dso_local noundef zeroext i1 @_ZNK8co_sleep11await_readyEv(ptr noundef nonnull align 4 dereferenceable(4) %this) #7 comdat align 2 !dbg !227 {
entry:
%this.addr = alloca ptr, align 8
store ptr %this, ptr %this.addr, align 8
+ #dbg_declare(ptr %this.addr, !228, !DIExpression(), !230)
%this1 = load ptr, ptr %this.addr, align 8
- ret i1 false
+ ret i1 false, !dbg !231
}
; Function Attrs: alwaysinline mustprogress
-define internal void @_Z3foov.__await_suspend_wrapper__await(ptr noundef nonnull %0, ptr noundef %1) #9 {
+define internal void @_Z3foov.__await_suspend_wrapper__await(ptr noundef nonnull %0, ptr noundef %1) #9 !dbg !232 {
entry:
%.addr = alloca ptr, align 8
%.addr1 = alloca ptr, align 8
%agg.tmp = alloca %"struct.std::__n4861::coroutine_handle", align 8
%ref.tmp = alloca %"struct.std::__n4861::coroutine_handle.0", align 8
store ptr %0, ptr %.addr, align 8
+ #dbg_declare(ptr %.addr, !233, !DIExpression(), !234)
store ptr %1, ptr %.addr1, align 8
+ #dbg_declare(ptr %.addr1, !235, !DIExpression(), !234)
%2 = load ptr, ptr %.addr, align 8
%3 = load ptr, ptr %.addr1, align 8
- %call = call ptr @_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEE12from_addressEPv(ptr noundef %3) #2
- %coerce.dive = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %ref.tmp, i32 0, i32 0
- store ptr %call, ptr %coerce.dive, align 8
- %call2 = call ptr @_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEcvNS0_IvEEEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp) #2
- %coerce.dive3 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp, i32 0, i32 0
- store ptr %call2, ptr %coerce.dive3, align 8
- %coerce.dive4 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp, i32 0, i32 0
- %4 = load ptr, ptr %coerce.dive4, align 8
- call void @_ZNK8co_sleep13await_suspendENSt7__n486116coroutine_handleIvEE(ptr noundef nonnull align 4 dereferenceable(4) %2, ptr %4) #2
- ret void
+ %call = call ptr @_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEE12from_addressEPv(ptr noundef %3) #2, !dbg !236
+ %coerce.dive = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %ref.tmp, i32 0, i32 0, !dbg !236
+ store ptr %call, ptr %coerce.dive, align 8, !dbg !236
+ %call2 = call ptr @_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEcvNS0_IvEEEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp) #2, !dbg !236
+ %coerce.dive3 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp, i32 0, i32 0, !dbg !236
+ store ptr %call2, ptr %coerce.dive3, align 8, !dbg !236
+ %coerce.dive4 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp, i32 0, i32 0, !dbg !236
+ %4 = load ptr, ptr %coerce.dive4, align 8, !dbg !236
+ call void @_ZNK8co_sleep13await_suspendENSt7__n486116coroutine_handleIvEE(ptr noundef nonnull align 4 dereferenceable(4) %2, ptr %4) #2, !dbg !236
+ ret void, !dbg !236
}
; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local void @_ZNK8co_sleep13await_suspendENSt7__n486116coroutine_handleIvEE(ptr noundef nonnull align 4 dereferenceable(4) %this, ptr %h.coerce) #7 comdat align 2 {
+define linkonce_odr dso_local void @_ZNK8co_sleep13await_suspendENSt7__n486116coroutine_handleIvEE(ptr noundef nonnull align 4 dereferenceable(4) %this, ptr %h.coerce) #7 comdat align 2 !dbg !237 {
entry:
%h = alloca %"struct.std::__n4861::coroutine_handle", align 8
%this.addr = alloca ptr, align 8
%coerce.dive = getelementptr inbounds nuw %"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
+ #dbg_declare(ptr %this.addr, !238, !DIExpression(), !239)
+ #dbg_declare(ptr %h, !240, !DIExpression(), !241)
%this1 = load ptr, ptr %this.addr, align 8
- ret void
+ ret void, !dbg !242
}
; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local void @_ZNK8co_sleep12await_resumeEv(ptr noundef nonnull align 4 dereferenceable(4) %this) #7 comdat align 2 {
+define linkonce_odr dso_local void @_ZNK8co_sleep12await_resumeEv(ptr noundef nonnull align 4 dereferenceable(4) %this) #7 comdat align 2 !dbg !243 {
entry:
%this.addr = alloca ptr, align 8
store ptr %this, ptr %this.addr, align 8
+ #dbg_declare(ptr %this.addr, !244, !DIExpression(), !245)
%this1 = load ptr, ptr %this.addr, align 8
- ret void
+ ret void, !dbg !246
}
; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local void @_ZN4Task12promise_type19unhandled_exceptionEv(ptr noundef nonnull align 1 dereferenceable(1) %this) #7 comdat align 2 {
+define linkonce_odr dso_local void @_ZN4Task12promise_type19unhandled_exceptionEv(ptr noundef nonnull align 1 dereferenceable(1) %this) #7 comdat align 2 !dbg !247 {
entry:
%this.addr = alloca ptr, align 8
store ptr %this, ptr %this.addr, align 8
+ #dbg_declare(ptr %this.addr, !248, !DIExpression(), !249)
%this1 = load ptr, ptr %this.addr, align 8
- ret void
+ ret void, !dbg !250
}
declare dso_local void @__cxa_end_catch()
; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local void @_ZN4Task12promise_type13final_suspendEv(ptr noundef nonnull align 1 dereferenceable(1) %this) #7 comdat align 2 {
+define linkonce_odr dso_local void @_ZN4Task12promise_type13final_suspendEv(ptr noundef nonnull align 1 dereferenceable(1) %this) #7 comdat align 2 !dbg !251 {
entry:
%this.addr = alloca ptr, align 8
store ptr %this, ptr %this.addr, align 8
+ #dbg_declare(ptr %this.addr, !252, !DIExpression(), !253)
%this1 = load ptr, ptr %this.addr, align 8
- ret void
+ ret void, !dbg !254
}
; Function Attrs: mustprogress noinline nounwind optnone 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 {
+define linkonce_odr dso_local noundef zeroext i1 @_ZNKSt7__n486114suspend_always11await_readyEv(ptr noundef nonnull align 1 dereferenceable(1) %this) #7 comdat align 2 !dbg !255 {
entry:
%this.addr = alloca ptr, align 8
store ptr %this, ptr %this.addr, align 8
+ #dbg_declare(ptr %this.addr, !256, !DIExpression(), !258)
%this1 = load ptr, ptr %this.addr, align 8
- ret i1 false
+ ret i1 false, !dbg !259
}
; Function Attrs: alwaysinline mustprogress
-define internal void @_Z3foov.__await_suspend_wrapper__final(ptr noundef nonnull %0, ptr noundef %1) #9 {
+define internal void @_Z3foov.__await_suspend_wrapper__final(ptr noundef nonnull %0, ptr noundef %1) #9 !dbg !260 {
entry:
%.addr = alloca ptr, align 8
%.addr1 = alloca ptr, align 8
%agg.tmp = alloca %"struct.std::__n4861::coroutine_handle", align 8
%ref.tmp = alloca %"struct.std::__n4861::coroutine_handle.0", align 8
store ptr %0, ptr %.addr, align 8
+ #dbg_declare(ptr %.addr, !261, !DIExpression(), !262)
store ptr %1, ptr %.addr1, align 8
+ #dbg_declare(ptr %.addr1, !263, !DIExpression(), !262)
%2 = load ptr, ptr %.addr, align 8
%3 = load ptr, ptr %.addr1, align 8
- %call = call ptr @_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEE12from_addressEPv(ptr noundef %3) #2
- %coerce.dive = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %ref.tmp, i32 0, i32 0
- store ptr %call, ptr %coerce.dive, align 8
- %call2 = call ptr @_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEcvNS0_IvEEEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp) #2
- %coerce.dive3 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp, i32 0, i32 0
- store ptr %call2, ptr %coerce.dive3, align 8
- %coerce.dive4 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp, i32 0, i32 0
- %4 = load ptr, ptr %coerce.dive4, align 8
- call void @_ZNKSt7__n486114suspend_always13await_suspendENS_16coroutine_handleIvEE(ptr noundef nonnull align 1 dereferenceable(1) %2, ptr %4) #2
- ret void
+ %call = call ptr @_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEE12from_addressEPv(ptr noundef %3) #2, !dbg !264
+ %coerce.dive = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %ref.tmp, i32 0, i32 0, !dbg !264
+ store ptr %call, ptr %coerce.dive, align 8, !dbg !264
+ %call2 = call ptr @_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEcvNS0_IvEEEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp) #2, !dbg !264
+ %coerce.dive3 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp, i32 0, i32 0, !dbg !264
+ store ptr %call2, ptr %coerce.dive3, align 8, !dbg !264
+ %coerce.dive4 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp, i32 0, i32 0, !dbg !264
+ %4 = load ptr, ptr %coerce.dive4, align 8, !dbg !264
+ call void @_ZNKSt7__n486114suspend_always13await_suspendENS_16coroutine_handleIvEE(ptr noundef nonnull align 1 dereferenceable(1) %2, ptr %4) #2, !dbg !264
+ ret void, !dbg !264
}
; Function Attrs: mustprogress noinline nounwind optnone 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 {
+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 !dbg !265 {
entry:
%0 = alloca %"struct.std::__n4861::coroutine_handle", align 8
%this.addr = alloca ptr, align 8
%coerce.dive = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %0, i32 0, i32 0
store ptr %.coerce, ptr %coerce.dive, align 8
store ptr %this, ptr %this.addr, align 8
+ #dbg_declare(ptr %this.addr, !266, !DIExpression(), !267)
+ #dbg_declare(ptr %0, !268, !DIExpression(), !269)
%this1 = load ptr, ptr %this.addr, align 8
- ret void
+ ret void, !dbg !270
}
; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local void @_ZNKSt7__n486114suspend_always12await_resumeEv(ptr noundef nonnull align 1 dereferenceable(1) %this) #7 comdat align 2 {
+define linkonce_odr dso_local void @_ZNKSt7__n486114suspend_always12await_resumeEv(ptr noundef nonnull align 1 dereferenceable(1) %this) #7 comdat align 2 !dbg !271 {
entry:
%this.addr = alloca ptr, align 8
store ptr %this, ptr %this.addr, align 8
+ #dbg_declare(ptr %this.addr, !272, !DIExpression(), !273)
%this1 = load ptr, ptr %this.addr, align 8
- ret void
+ ret void, !dbg !274
}
; Function Attrs: nobuiltin nounwind
@@ -648,59 +609,64 @@ declare ptr @llvm.coro.free(token, ptr readonly captures(none)) #11
declare void @llvm.coro.end(ptr, i1, token) #2
; Function Attrs: mustprogress noinline norecurse nounwind optnone uwtable
-define dso_local noundef i32 @main() #12 {
+define dso_local noundef i32 @main() #12 !dbg !275 {
entry:
%undef.agg.tmp = alloca %struct.Task, align 1
- call void @_Z3foov() #2
- ret i32 0
+ call void @_Z3foov() #2, !dbg !278
+ ret i32 0, !dbg !279
}
; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local void @_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %this) unnamed_addr #7 comdat align 2 {
+define linkonce_odr dso_local void @_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %this) unnamed_addr #7 comdat align 2 !dbg !280 {
entry:
%this.addr = alloca ptr, align 8
store ptr %this, ptr %this.addr, align 8
+ #dbg_declare(ptr %this.addr, !281, !DIExpression(), !283)
%this1 = load ptr, ptr %this.addr, align 8
- %_M_fr_ptr = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %this1, i32 0, i32 0
- store ptr null, ptr %_M_fr_ptr, align 8
- ret void
+ %_M_fr_ptr = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %this1, i32 0, i32 0, !dbg !284
+ store ptr null, ptr %_M_fr_ptr, align 8, !dbg !284
+ ret void, !dbg !285
}
; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local ptr @_ZNSt7__n486116coroutine_handleIvE12from_addressEPv(ptr noundef %__a) #7 comdat align 2 {
+define linkonce_odr dso_local ptr @_ZNSt7__n486116coroutine_handleIvE12from_addressEPv(ptr noundef %__a) #7 comdat align 2 !dbg !286 {
entry:
%retval = alloca %"struct.std::__n4861::coroutine_handle", align 8
%__a.addr = alloca ptr, align 8
store ptr %__a, ptr %__a.addr, align 8
- call void @_ZNSt7__n486116coroutine_handleIvEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %retval) #2
- %0 = load ptr, ptr %__a.addr, align 8
- %_M_fr_ptr = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %retval, i32 0, i32 0
- store ptr %0, ptr %_M_fr_ptr, align 8
- %coerce.dive = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %retval, i32 0, i32 0
- %1 = load ptr, ptr %coerce.dive, align 8
- ret ptr %1
+ #dbg_declare(ptr %__a.addr, !287, !DIExpression(), !288)
+ #dbg_declare(ptr %retval, !289, !DIExpression(), !290)
+ call void @_ZNSt7__n486116coroutine_handleIvEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %retval) #2, !dbg !290
+ %0 = load ptr, ptr %__a.addr, align 8, !dbg !291
+ %_M_fr_ptr = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %retval, i32 0, i32 0, !dbg !292
+ store ptr %0, ptr %_M_fr_ptr, align 8, !dbg !293
+ %coerce.dive = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %retval, i32 0, i32 0, !dbg !294
+ %1 = load ptr, ptr %coerce.dive, align 8, !dbg !294
+ ret ptr %1, !dbg !294
}
; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local noundef ptr @_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEE7addressEv(ptr noundef nonnull align 8 dereferenceable(8) %this) #7 comdat align 2 {
+define linkonce_odr dso_local noundef ptr @_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEE7addressEv(ptr noundef nonnull align 8 dereferenceable(8) %this) #7 comdat align 2 !dbg !295 {
entry:
%this.addr = alloca ptr, align 8
store ptr %this, ptr %this.addr, align 8
+ #dbg_declare(ptr %this.addr, !296, !DIExpression(), !297)
%this1 = load ptr, ptr %this.addr, align 8
- %_M_fr_ptr = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %this1, i32 0, i32 0
- %0 = load ptr, ptr %_M_fr_ptr, align 8
- ret ptr %0
+ %_M_fr_ptr = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %this1, i32 0, i32 0, !dbg !298
+ %0 = load ptr, ptr %_M_fr_ptr, align 8, !dbg !298
+ ret ptr %0, !dbg !299
}
; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local void @_ZNSt7__n486116coroutine_handleIvEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %this) unnamed_addr #7 comdat align 2 {
+define linkonce_odr dso_local void @_ZNSt7__n486116coroutine_handleIvEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %this) unnamed_addr #7 comdat align 2 !dbg !300 {
entry:
%this.addr = alloca ptr, align 8
store ptr %this, ptr %this.addr, align 8
+ #dbg_declare(ptr %this.addr, !301, !DIExpression(), !303)
%this1 = load ptr, ptr %this.addr, align 8
- %_M_fr_ptr = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %this1, i32 0, i32 0
- store ptr null, ptr %_M_fr_ptr, align 8
- ret void
+ %_M_fr_ptr = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %this1, i32 0, i32 0, !dbg !304
+ store ptr null, ptr %_M_fr_ptr, align 8, !dbg !304
+ ret void, !dbg !305
}
attributes #0 = { mustprogress noinline nounwind optnone presplitcoroutine uwtable "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
@@ -719,10 +685,313 @@ attributes #12 = { mustprogress noinline norecurse nounwind optnone uwtable "fra
attributes #13 = { allocsize(0) }
attributes #14 = { noreturn nounwind }
-!llvm.module.flags = !{!0, !1, !2}
-!llvm.ident = !{!3}
-
-!0 = !{i32 1, !"wchar_size", i32 4}
-!1 = !{i32 7, !"uwtable", i32 2}
-!2 = !{i32 7, !"frame-pointer", i32 2}
-!3 = !{!"clang version 22.0.0git (https://github.com/llvm/llvm-project.git 837d8c3f38d82a69e2cd9365ca9bcc82f31628df)"}
+!llvm.dbg.cu = !{!0}
+!llvm.module.flags = !{!150, !151, !152, !153, !154}
+!llvm.ident = !{!155}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 22.0.0git (https://github.com/llvm/llvm-project.git fe218aab737d55dfd67f4f84118744003f45958e)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, retainedTypes: !2, splitDebugInlining: false, nameTableKind: None)
+!1 = !DIFile(filename: "pseudo-probe-coro-debug-fix.cpp", directory: "/tmp", checksumkind: CSK_MD5, checksum: "601552fedf6b88dcf699ea9d066126eb")
+!2 = !{!3, !31, !88, !131}
+!3 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "promise_type", scope: !4, file: !1, line: 10, size: 8, flags: DIFlagTypePassByValue, elements: !6, identifier: "_ZTSN4Task12promise_typeE")
+!4 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Task", file: !1, line: 9, size: 8, flags: DIFlagTypePassByValue, elements: !5, identifier: "_ZTS4Task")
+!5 = !{}
+!6 = !{!7, !11, !14, !71, !87}
+!7 = !DISubprogram(name: "promise_type", linkageName: "_ZN4Task12promise_typeC4Ev", scope: !3, file: !1, line: 11, type: !8, scopeLine: 11, flags: DIFlagPrototyped, spFlags: 0)
+!8 = !DISubroutineType(types: !9)
+!9 = !{null, !10}
+!10 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !3, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
+!11 = !DISubprogram(name: "get_return_object", linkageName: "_ZN4Task12promise_type17get_return_objectEv", scope: !3, file: !1, line: 12, type: !12, scopeLine: 12, flags: DIFlagPrototyped, spFlags: 0)
+!12 = !DISubroutineType(types: !13)
+!13 = !{!4, !10}
+!14 = !DISubprogram(name: "initial_suspend", linkageName: "_ZN4Task12promise_type15initial_suspendEv", scope: !3, file: !1, line: 13, type: !15, scopeLine: 13, flags: DIFlagPrototyped, spFlags: 0)
+!15 = !DISubroutineType(types: !16)
+!16 = !{!17, !10}
+!17 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "suspend_never", scope: !19, file: !18, line: 322, size: 8, flags: DIFlagTypePassByValue, elements: !21, identifier: "_ZTSNSt7__n486113suspend_neverE")
+!18 = !DIFile(filename: "/usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/coroutine", directory: "")
+!19 = !DINamespace(name: "__n4861", scope: !20, exportSymbols: true)
+!20 = !DINamespace(name: "std", scope: null)
+!21 = !{!22, !28, !68}
+!22 = !DISubprogram(name: "await_ready", linkageName: "_ZNKSt7__n486113suspend_never11await_readyEv", scope: !17, file: !18, line: 324, type: !23, scopeLine: 324, flags: DIFlagPrototyped, spFlags: 0)
+!23 = !DISubroutineType(types: !24)
+!24 = !{!25, !26}
+!25 = !DIBasicType(name: "bool", size: 8, encoding: DW_ATE_boolean)
+!26 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !27, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
+!27 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !17)
+!28 = !DISubprogram(name: "await_suspend", linkageName: "_ZNKSt7__n486113suspend_never13await_suspendENS_16coroutine_handleIvEE", scope: !17, file: !18, line: 326, type: !29, scopeLine: 326, flags: DIFlagPrototyped, spFlags: 0)
+!29 = !DISubroutineType(types: !30)
+!30 = !{null, !26, !31}
+!31 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "coroutine_handle<void>", scope: !19, file: !18, line: 87, size: 64, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !32, templateParams: !66, identifier: "_ZTSNSt7__n486116coroutine_handleIvEE")
+!32 = !{!33, !35, !39, !45, !49, !54, !57, !60, !61, !64, !65}
+!33 = !DIDerivedType(tag: DW_TAG_member, name: "_M_fr_ptr", scope: !31, file: !18, line: 131, baseType: !34, size: 64, flags: DIFlagProtected)
+!34 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 64)
+!35 = !DISubprogram(name: "coroutine_handle", linkageName: "_ZNSt7__n486116coroutine_handleIvEC4Ev", scope: !31, file: !18, line: 91, type: !36, scopeLine: 91, flags: DIFlagPrototyped, spFlags: 0)
+!36 = !DISubroutineType(types: !37)
+!37 = !{null, !38}
+!38 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !31, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
+!39 = !DISubprogram(name: "coroutine_handle", linkageName: "_ZNSt7__n486116coroutine_handleIvEC4EDn", scope: !31, file: !18, line: 93, type: !40, scopeLine: 93, flags: DIFlagPrototyped, spFlags: 0)
+!40 = !DISubroutineType(types: !41)
+!41 = !{null, !38, !42}
+!42 = !DIDerivedType(tag: DW_TAG_typedef, name: "nullptr_t", scope: !20, file: !43, line: 2445, baseType: !44)
+!43 = !DIFile(filename: "/usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/x86_64-redhat-linux/bits/c++config.h", directory: "", checksumkind: CSK_MD5, checksum: "9e5d800a0ad50a6623343c536b5593c0")
+!44 = !DIBasicType(tag: DW_TAG_unspecified_type, name: "decltype(nullptr)")
+!45 = !DISubprogram(name: "operator=", linkageName: "_ZNSt7__n486116coroutine_handleIvEaSEDn", scope: !31, file: !18, line: 97, type: !46, scopeLine: 97, flags: DIFlagPrototyped, spFlags: 0)
+!46 = !DISubroutineType(types: !47)
+!47 = !{!48, !38, !42}
+!48 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !31, size: 64)
+!49 = !DISubprogram(name: "address", linkageName: "_ZNKSt7__n486116coroutine_handleIvE7addressEv", scope: !31, file: !18, line: 105, type: !50, scopeLine: 105, flags: DIFlagPrototyped, spFlags: 0)
+!50 = !DISubroutineType(types: !51)
+!51 = !{!34, !52}
+!52 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !53, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
+!53 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !31)
+!54 = !DISubprogram(name: "from_address", linkageName: "_ZNSt7__n486116coroutine_handleIvE12from_addressEPv", scope: !31, file: !18, line: 107, type: !55, scopeLine: 107, flags: DIFlagPrototyped | DIFlagStaticMember, spFlags: 0)
+!55 = !DISubroutineType(types: !56)
+!56 = !{!31, !34}
+!57 = !DISubprogram(name: "operator bool", linkageName: "_ZNKSt7__n486116coroutine_handleIvEcvbEv", scope: !31, file: !18, line: 116, type: !58, scopeLine: 116, flags: DIFlagExplicit | DIFlagPrototyped, spFlags: 0)
+!58 = !DISubroutineType(types: !59)
+!59 = !{!25, !52}
+!60 = !DISubprogram(name: "done", linkageName: "_ZNKSt7__n486116coroutine_handleIvE4doneEv", scope: !31, file: !18, line: 121, type: !58, scopeLine: 121, flags: DIFlagPrototyped, spFlags: 0)
+!61 = !DISubprogram(name: "operator()", linkageName: "_ZNKSt7__n486116coroutine_handleIvEclEv", scope: !31, file: !18, line: 124, type: !62, scopeLine: 124, flags: DIFlagPrototyped, spFlags: 0)
+!62 = !DISubroutineType(types: !63)
+!63 = !{null, !52}
+!64 = !DISubprogram(name: "resume", linkageName: "_ZNKSt7__n486116coroutine_handleIvE6resumeEv", scope: !31, file: !18, line: 126, type: !62, scopeLine: 126, flags: DIFlagPrototyped, spFlags: 0)
+!65 = !DISubprogram(name: "destroy", linkageName: "_ZNKSt7__n486116coroutine_handleIvE7destroyEv", scope: !31, file: !18, line: 128, type: !62, scopeLine: 128, flags: DIFlagPrototyped, spFlags: 0)
+!66 = !{!67}
+!67 = !DITemplateTypeParameter(name: "_Promise", type: null, defaulted: true)
+!68 = !DISubprogram(name: "await_resume", linkageName: "_ZNKSt7__n486113suspend_never12await_resumeEv", scope: !17, file: !18, line: 328, type: !69, scopeLine: 328, flags: DIFlagPrototyped, spFlags: 0)
+!69 = !DISubroutineType(types: !70)
+!70 = !{null, !26}
+!71 = !DISubprogram(name: "final_suspend", linkageName: "_ZN4Task12promise_type13final_suspendEv", scope: !3, file: !1, line: 14, type: !72, scopeLine: 14, flags: DIFlagPrototyped, spFlags: 0)
+!72 = !DISubroutineType(types: !73)
+!73 = !{!74, !10}
+!74 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "suspend_always", scope: !19, file: !18, line: 313, size: 8, flags: DIFlagTypePassByValue, elements: !75, identifier: "_ZTSNSt7__n486114suspend_alwaysE")
+!75 = !{!76, !81, !84}
+!76 = !DISubprogram(name: "await_ready", linkageName: "_ZNKSt7__n486114suspend_always11await_readyEv", scope: !74, file: !18, line: 315, type: !77, scopeLine: 315, flags: DIFlagPrototyped, spFlags: 0)
+!77 = !DISubroutineType(types: !78)
+!78 = !{!25, !79}
+!79 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !80, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
+!80 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !74)
+!81 = !DISubprogram(name: "await_suspend", linkageName: "_ZNKSt7__n486114suspend_always13await_suspendENS_16coroutine_handleIvEE", scope: !74, file: !18, line: 317, type: !82, scopeLine: 317, flags: DIFlagPrototyped, spFlags: 0)
+!82 = !DISubroutineType(types: !83)
+!83 = !{null, !79, !31}
+!84 = !DISubprogram(name: "await_resume", linkageName: "_ZNKSt7__n486114suspend_always12await_resumeEv", scope: !74, file: !18, line: 319, type: !85, scopeLine: 319, flags: DIFlagPrototyped, spFlags: 0)
+!85 = !DISubroutineType(types: !86)
+!86 = !{null, !79}
+!87 = !DISubprogram(name: "unhandled_exception", linkageName: "_ZN4Task12promise_type19unhandled_exceptionEv", scope: !3, file: !1, line: 15, type: !8, scopeLine: 15, flags: DIFlagPrototyped, spFlags: 0)
+!88 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "coroutine_handle<Task::promise_type>", scope: !19, file: !18, line: 182, size: 64, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !89, templateParams: !129, identifier: "_ZTSNSt7__n486116coroutine_handleIN4Task12promise_typeEEE")
+!89 = !{!90, !91, !95, !98, !102, !106, !111, !114, !117, !120, !121, !124, !125, !126}
+!90 = !DIDerivedType(tag: DW_TAG_member, name: "_M_fr_ptr", scope: !88, file: !18, line: 244, baseType: !34, size: 64, flags: DIFlagPrivate)
+!91 = !DISubprogram(name: "coroutine_handle", linkageName: "_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEEC4Ev", scope: !88, file: !18, line: 186, type: !92, scopeLine: 186, flags: DIFlagPrototyped, spFlags: 0)
+!92 = !DISubroutineType(types: !93)
+!93 = !{null, !94}
+!94 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !88, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
+!95 = !DISubprogram(name: "coroutine_handle", linkageName: "_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEEC4EDn", scope: !88, file: !18, line: 188, type: !96, scopeLine: 188, flags: DIFlagPrototyped, spFlags: 0)
+!96 = !DISubroutineType(types: !97)
+!97 = !{null, !94, !42}
+!98 = !DISubprogram(name: "from_promise", linkageName: "_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEE12from_promiseERS2_", scope: !88, file: !18, line: 191, type: !99, scopeLine: 191, flags: DIFlagPrototyped | DIFlagStaticMember, spFlags: 0)
+!99 = !DISubroutineType(types: !100)
+!100 = !{!88, !101}
+!101 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !3, size: 64)
+!102 = !DISubprogram(name: "operator=", linkageName: "_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEEaSEDn", scope: !88, file: !18, line: 199, type: !103, scopeLine: 199, flags: DIFlagPrototyped, spFlags: 0)
+!103 = !DISubroutineType(types: !104)
+!104 = !{!105, !94, !42}
+!105 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !88, size: 64)
+!106 = !DISubprogram(name: "address", linkageName: "_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEE7addressEv", scope: !88, file: !18, line: 207, type: !107, scopeLine: 207, flags: DIFlagPrototyped, spFlags: 0)
+!107 = !DISubroutineType(types: !108)
+!108 = !{!34, !109}
+!109 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !110, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
+!110 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !88)
+!111 = !DISubprogram(name: "from_address", linkageName: "_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEE12from_addressEPv", scope: !88, file: !18, line: 209, type: !112, scopeLine: 209, flags: DIFlagPrototyped | DIFlagStaticMember, spFlags: 0)
+!112 = !DISubroutineType(types: !113)
+!113 = !{!88, !34}
+!114 = !DISubprogram(name: "operator coroutine_handle", linkageName: "_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEcvNS0_IvEEEv", scope: !88, file: !18, line: 217, type: !115, scopeLine: 217, flags: DIFlagPrototyped, spFlags: 0)
+!115 = !DISubroutineType(types: !116)
+!116 = !{!31, !109}
+!117 = !DISubprogram(name: "operator bool", linkageName: "_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEcvbEv", scope: !88, file: !18, line: 221, type: !118, scopeLine: 221, flags: DIFlagExplicit | DIFlagPrototyped, spFlags: 0)
+!118 = !DISubroutineType(types: !119)
+!119 = !{!25, !109}
+!120 = !DISubprogram(name: "done", linkageName: "_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEE4doneEv", scope: !88, file: !18, line: 226, type: !118, scopeLine: 226, flags: DIFlagPrototyped, spFlags: 0)
+!121 = !DISubprogram(name: "operator()", linkageName: "_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEclEv", scope: !88, file: !18, line: 229, type: !122, scopeLine: 229, flags: DIFlagPrototyped, spFlags: 0)
+!122 = !DISubroutineType(types: !123)
+!123 = !{null, !109}
+!124 = !DISubprogram(name: "resume", linkageName: "_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEE6resumeEv", scope: !88, file: !18, line: 231, type: !122, scopeLine: 231, flags: DIFlagPrototyped, spFlags: 0)
+!125 = !DISubprogram(name: "destroy", linkageName: "_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEE7destroyEv", scope: !88, file: !18, line: 233, type: !122, scopeLine: 233, flags: DIFlagPrototyped, spFlags: 0)
+!126 = !DISubprogram(name: "promise", linkageName: "_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEE7promiseEv", scope: !88, file: !18, line: 236, type: !127, scopeLine: 236, flags: DIFlagPrototyped, spFlags: 0)
+!127 = !DISubroutineType(types: !128)
+!128 = !{!101, !109}
+!129 = !{!130}
+!130 = !DITemplateTypeParameter(name: "_Promise", type: !3)
+!131 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "co_sleep", file: !1, line: 2, size: 32, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !132, identifier: "_ZTS8co_sleep")
+!132 = !{!133, !135, !139, !144, !147}
+!133 = !DIDerivedType(tag: DW_TAG_member, name: "delay", scope: !131, file: !1, line: 7, baseType: !134, size: 32)
+!134 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
+!135 = !DISubprogram(name: "co_sleep", linkageName: "_ZN8co_sleepC4Ei", scope: !131, file: !1, line: 3, type: !136, scopeLine: 3, flags: DIFlagPrototyped, spFlags: 0)
+!136 = !DISubroutineType(types: !137)
+!137 = !{null, !138, !134}
+!138 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !131, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
+!139 = !DISubprogram(name: "await_ready", linkageName: "_ZNK8co_sleep11await_readyEv", scope: !131, file: !1, line: 4, type: !140, scopeLine: 4, flags: DIFlagPrototyped, spFlags: 0)
+!140 = !DISubroutineType(types: !141)
+!141 = !{!25, !142}
+!142 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !143, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
+!143 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !131)
+!144 = !DISubprogram(name: "await_suspend", linkageName: "_ZNK8co_sleep13await_suspendENSt7__n486116coroutine_handleIvEE", scope: !131, file: !1, line: 5, type: !145, scopeLine: 5, flags: DIFlagPrototyped, spFlags: 0)
+!145 = !DISubroutineType(types: !146)
+!146 = !{null, !142, !31}
+!147 = !DISubprogram(name: "await_resume", linkageName: "_ZNK8co_sleep12await_resumeEv", scope: !131, file: !1, line: 6, type: !148, scopeLine: 6, flags: DIFlagPrototyped, spFlags: 0)
+!148 = !DISubroutineType(types: !149)
+!149 = !{null, !142}
+!150 = !{i32 7, !"Dwarf Version", i32 5}
+!151 = !{i32 2, !"Debug Info Version", i32 3}
+!152 = !{i32 1, !"wchar_size", i32 4}
+!153 = !{i32 7, !"uwtable", i32 2}
+!154 = !{i32 7, !"frame-pointer", i32 2}
+!155 = !{!"clang version 22.0.0git (https://github.com/llvm/llvm-project.git fe218aab737d55dfd67f4f84118744003f45958e)"}
+!156 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !1, file: !1, line: 18, type: !157, scopeLine: 18, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !5)
+!157 = !DISubroutineType(types: !158)
+!158 = !{!4}
+!159 = !DILocation(line: 18, column: 21, scope: !156)
+!160 = !DILocation(line: 18, column: 6, scope: !156)
+!161 = !DILocalVariable(name: "__promise", scope: !156, type: !162, flags: DIFlagArtificial)
+!162 = !DIDerivedType(tag: DW_TAG_typedef, name: "promise_type", scope: !163, file: !18, line: 75, baseType: !3)
+!163 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "__coroutine_traits_impl<Task, void>", scope: !19, file: !18, line: 72, size: 8, flags: DIFlagTypePassByValue, elements: !5, templateParams: !164, identifier: "_ZTSNSt7__n486123__coroutine_traits_implI4TaskvEE")
+!164 = !{!165, !166}
+!165 = !DITemplateTypeParameter(name: "_Result", type: !4)
+!166 = !DITemplateTypeParameter(type: null, defaulted: true)
+!167 = !DILocation(line: 0, scope: !156)
+!168 = !DILocation(line: 19, column: 12, scope: !169)
+!169 = distinct !DILexicalBlock(scope: !156, file: !1, line: 18, column: 21)
+!170 = !DILocation(line: 19, column: 3, scope: !169)
+!171 = !DILocation(line: 20, column: 1, scope: !169)
+!172 = distinct !DISubprogram(name: "get_return_object", linkageName: "_ZN4Task12promise_type17get_return_objectEv", scope: !3, file: !1, line: 12, type: !12, scopeLine: 12, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !11, retainedNodes: !5)
+!173 = !DILocalVariable(name: "this", arg: 1, scope: !172, type: !174, flags: DIFlagArtificial | DIFlagObjectPointer)
+!174 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !3, size: 64)
+!175 = !DILocation(line: 0, scope: !172)
+!176 = !DILocation(line: 12, column: 32, scope: !172)
+!177 = distinct !DISubprogram(name: "initial_suspend", linkageName: "_ZN4Task12promise_type15initial_suspendEv", scope: !3, file: !1, line: 13, type: !15, scopeLine: 13, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !14, retainedNodes: !5)
+!178 = !DILocalVariable(name: "this", arg: 1, scope: !177, type: !174, flags: DIFlagArtificial | DIFlagObjectPointer)
+!179 = !DILocation(line: 0, scope: !177)
+!180 = !DILocation(line: 13, column: 44, scope: !177)
+!181 = distinct !DISubprogram(name: "await_ready", linkageName: "_ZNKSt7__n486113suspend_never11await_readyEv", scope: !17, file: !18, line: 324, type: !23, scopeLine: 324, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !22, retainedNodes: !5)
+!182 = !DILocalVariable(name: "this", arg: 1, scope: !181, type: !183, flags: DIFlagArtificial | DIFlagObjectPointer)
+!183 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !27, size: 64)
+!184 = !DILocation(line: 0, scope: !181)
+!185 = !DILocation(line: 324, column: 51, scope: !181)
+!186 = distinct !DISubprogram(linkageName: "_Z3foov.__await_suspend_wrapper__init", scope: !1, file: !1, type: !187, flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: !0, retainedNodes: !5)
+!187 = !DISubroutineType(types: !5)
+!188 = !DILocalVariable(arg: 1, scope: !186, type: !34, flags: DIFlagArtificial)
+!189 = !DILocation(line: 0, scope: !186)
+!190 = !DILocalVariable(arg: 2, scope: !186, type: !34, flags: DIFlagArtificial)
+!191 = !DILocation(line: 18, column: 6, scope: !186)
+!192 = distinct !DISubprogram(name: "await_suspend", linkageName: "_ZNKSt7__n486113suspend_never13await_suspendENS_16coroutine_handleIvEE", scope: !17, file: !18, line: 326, type: !29, scopeLine: 326, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !28, retainedNodes: !5)
+!193 = !DILocalVariable(name: "this", arg: 1, scope: !192, type: !183, flags: DIFlagArtificial | DIFlagObjectPointer)
+!194 = !DILocation(line: 0, scope: !192)
+!195 = !DILocalVariable(arg: 2, scope: !192, file: !18, line: 326, type: !31)
+!196 = !DILocation(line: 326, column: 52, scope: !192)
+!197 = !DILocation(line: 326, column: 70, scope: !192)
+!198 = distinct !DISubprogram(name: "from_address", linkageName: "_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEE12from_addressEPv", scope: !88, file: !18, line: 209, type: !112, scopeLine: 210, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !111, retainedNodes: !5)
+!199 = !DILocalVariable(name: "__a", arg: 1, scope: !198, file: !18, line: 209, type: !34)
+!200 = !DILocation(line: 209, column: 60, scope: !198)
+!201 = !DILocalVariable(name: "__self", scope: !198, file: !18, line: 211, type: !88)
+!202 = !DILocation(line: 211, column: 19, scope: !198)
+!203 = !DILocation(line: 212, column: 21, scope: !198)
+!204 = !DILocation(line: 212, column: 9, scope: !198)
+!205 = !DILocation(line: 212, column: 19, scope: !198)
+!206 = !DILocation(line: 213, column: 2, scope: !198)
+!207 = distinct !DISubprogram(name: "operator coroutine_handle", linkageName: "_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEcvNS0_IvEEEv", scope: !88, file: !18, line: 217, type: !115, scopeLine: 218, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !114, retainedNodes: !5)
+!208 = !DILocalVariable(name: "this", arg: 1, scope: !207, type: !209, flags: DIFlagArtificial | DIFlagObjectPointer)
+!209 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !110, size: 64)
+!210 = !DILocation(line: 0, scope: !207)
+!211 = !DILocation(line: 218, column: 49, scope: !207)
+!212 = !DILocation(line: 218, column: 16, scope: !207)
+!213 = !DILocation(line: 218, column: 9, scope: !207)
+!214 = distinct !DISubprogram(name: "await_resume", linkageName: "_ZNKSt7__n486113suspend_never12await_resumeEv", scope: !17, file: !18, line: 328, type: !69, scopeLine: 328, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !68, retainedNodes: !5)
+!215 = !DILocalVariable(name: "this", arg: 1, scope: !214, type: !183, flags: DIFlagArtificial | DIFlagObjectPointer)
+!216 = !DILocation(line: 0, scope: !214)
+!217 = !DILocation(line: 328, column: 51, scope: !214)
+!218 = distinct !DISubprogram(name: "co_sleep", linkageName: "_ZN8co_sleepC2Ei", scope: !131, file: !1, line: 3, type: !136, scopeLine: 3, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !135, retainedNodes: !5)
+!219 = !DILocalVariable(name: "this", arg: 1, scope: !218, type: !220, flags: DIFlagArtificial | DIFlagObjectPointer)
+!220 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !131, size: 64)
+!221 = !DILocation(line: 0, scope: !218)
+!222 = !DILocalVariable(name: "n", arg: 2, scope: !218, file: !1, line: 3, type: !134)
+!223 = !DILocation(line: 3, column: 16, scope: !218)
+!224 = !DILocation(line: 3, column: 21, scope: !218)
+!225 = !DILocation(line: 3, column: 27, scope: !218)
+!226 = !DILocation(line: 3, column: 31, scope: !218)
+!227 = distinct !DISubprogram(name: "await_ready", linkageName: "_ZNK8co_sleep11await_readyEv", scope: !131, file: !1, line: 4, type: !140, scopeLine: 4, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !139, retainedNodes: !5)
+!228 = !DILocalVariable(name: "this", arg: 1, scope: !227, type: !229, flags: DIFlagArtificial | DIFlagObjectPointer)
+!229 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !143, size: 64)
+!230 = !DILocation(line: 0, scope: !227)
+!231 = !DILocation(line: 4, column: 49, scope: !227)
+!232 = distinct !DISubprogram(linkageName: "_Z3foov.__await_suspend_wrapper__await", scope: !1, file: !1, type: !187, flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: !0, retainedNodes: !5)
+!233 = !DILocalVariable(arg: 1, scope: !232, type: !34, flags: DIFlagArtificial)
+!234 = !DILocation(line: 0, scope: !232)
+!235 = !DILocalVariable(arg: 2, scope: !232, type: !34, flags: DIFlagArtificial)
+!236 = !DILocation(line: 19, column: 12, scope: !232)
+!237 = distinct !DISubprogram(name: "await_suspend", linkageName: "_ZNK8co_sleep13await_suspendENSt7__n486116coroutine_handleIvEE", scope: !131, file: !1, line: 5, type: !145, scopeLine: 5, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !144, retainedNodes: !5)
+!238 = !DILocalVariable(name: "this", arg: 1, scope: !237, type: !229, flags: DIFlagArtificial | DIFlagObjectPointer)
+!239 = !DILocation(line: 0, scope: !237)
+!240 = !DILocalVariable(name: "h", arg: 2, scope: !237, file: !1, line: 5, type: !31)
+!241 = !DILocation(line: 5, column: 46, scope: !237)
+!242 = !DILocation(line: 5, column: 65, scope: !237)
+!243 = distinct !DISubprogram(name: "await_resume", linkageName: "_ZNK8co_sleep12await_resumeEv", scope: !131, file: !1, line: 6, type: !148, scopeLine: 6, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !147, retainedNodes: !5)
+!244 = !DILocalVariable(name: "this", arg: 1, scope: !243, type: !229, flags: DIFlagArtificial | DIFlagObjectPointer)
+!245 = !DILocation(line: 0, scope: !243)
+!246 = !DILocation(line: 6, column: 39, scope: !243)
+!247 = distinct !DISubprogram(name: "unhandled_exception", linkageName: "_ZN4Task12promise_type19unhandled_exceptionEv", scope: !3, file: !1, line: 15, type: !8, scopeLine: 15, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !87, retainedNodes: !5)
+!248 = !DILocalVariable(name: "this", arg: 1, scope: !247, type: !174, flags: DIFlagArtificial | DIFlagObjectPointer)
+!249 = !DILocation(line: 0, scope: !247)
+!250 = !DILocation(line: 15, column: 33, scope: !247)
+!251 = distinct !DISubprogram(name: "final_suspend", linkageName: "_ZN4Task12promise_type13final_suspendEv", scope: !3, file: !1, line: 14, type: !72, scopeLine: 14, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !71, retainedNodes: !5)
+!252 = !DILocalVariable(name: "this", arg: 1, scope: !251, type: !174, flags: DIFlagArtificial | DIFlagObjectPointer)
+!253 = !DILocation(line: 0, scope: !251)
+!254 = !DILocation(line: 14, column: 52, scope: !251)
+!255 = distinct !DISubprogram(name: "await_ready", linkageName: "_ZNKSt7__n486114suspend_always11await_readyEv", scope: !74, file: !18, line: 315, type: !77, scopeLine: 315, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !76, retainedNodes: !5)
+!256 = !DILocalVariable(name: "this", arg: 1, scope: !255, type: !257, flags: DIFlagArtificial | DIFlagObjectPointer)
+!257 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !80, size: 64)
+!258 = !DILocation(line: 0, scope: !255)
+!259 = !DILocation(line: 315, column: 51, scope: !255)
+!260 = distinct !DISubprogram(linkageName: "_Z3foov.__await_suspend_wrapper__final", scope: !1, file: !1, type: !187, flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: !0, retainedNodes: !5)
+!261 = !DILocalVariable(arg: 1, scope: !260, type: !34, flags: DIFlagArtificial)
+!262 = !DILocation(line: 0, scope: !260)
+!263 = !DILocalVariable(arg: 2, scope: !260, type: !34, flags: DIFlagArtificial)
+!264 = !DILocation(line: 18, column: 6, scope: !260)
+!265 = distinct !DISubprogram(name: "await_suspend", linkageName: "_ZNKSt7__n486114suspend_always13await_suspendENS_16coroutine_handleIvEE", scope: !74, file: !18, line: 317, type: !82, scopeLine: 317, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !81, retainedNodes: !5)
+!266 = !DILocalVariable(name: "this", arg: 1, scope: !265, type: !257, flags: DIFlagArtificial | DIFlagObjectPointer)
+!267 = !DILocation(line: 0, scope: !265)
+!268 = !DILocalVariable(arg: 2, scope: !265, file: !18, line: 317, type: !31)
+!269 = !DILocation(line: 317, column: 52, scope: !265)
+!270 = !DILocation(line: 317, column: 70, scope: !265)
+!271 = distinct !DISubprogram(name: "await_resume", linkageName: "_ZNKSt7__n486114suspend_always12await_resumeEv", scope: !74, file: !18, line: 319, type: !85, scopeLine: 319, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !84, retainedNodes: !5)
+!272 = !DILocalVariable(name: "this", arg: 1, scope: !271, type: !257, flags: DIFlagArtificial | DIFlagObjectPointer)
+!273 = !DILocation(line: 0, scope: !271)
+!274 = !DILocation(line: 319, column: 51, scope: !271)
+!275 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 22, type: !276, scopeLine: 22, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0)
+!276 = !DISubroutineType(types: !277)
+!277 = !{!134}
+!278 = !DILocation(line: 23, column: 3, scope: !275)
+!279 = !DILocation(line: 24, column: 1, scope: !275)
+!280 = distinct !DISubprogram(name: "coroutine_handle", linkageName: "_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEEC2Ev", scope: !88, file: !18, line: 186, type: !92, scopeLine: 186, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !91, retainedNodes: !5)
+!281 = !DILocalVariable(name: "this", arg: 1, scope: !280, type: !282, flags: DIFlagArtificial | DIFlagObjectPointer)
+!282 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !88, size: 64)
+!283 = !DILocation(line: 0, scope: !280)
+!284 = !DILocation(line: 244, column: 13, scope: !280)
+!285 = !DILocation(line: 186, column: 47, scope: !280)
+!286 = distinct !DISubprogram(name: "from_address", linkageName: "_ZNSt7__n486116coroutine_handleIvE12from_addressEPv", scope: !31, file: !18, line: 107, type: !55, scopeLine: 108, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !54, retainedNodes: !5)
+!287 = !DILocalVariable(name: "__a", arg: 1, scope: !286, file: !18, line: 107, type: !34)
+!288 = !DILocation(line: 107, column: 60, scope: !286)
+!289 = !DILocalVariable(name: "__self", scope: !286, file: !18, line: 109, type: !31)
+!290 = !DILocation(line: 109, column: 19, scope: !286)
+!291 = !DILocation(line: 110, column: 21, scope: !286)
+!292 = !DILocation(line: 110, column: 9, scope: !286)
+!293 = !DILocation(line: 110, column: 19, scope: !286)
+!294 = !DILocation(line: 111, column: 2, scope: !286)
+!295 = distinct !DISubprogram(name: "address", linkageName: "_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEE7addressEv", scope: !88, file: !18, line: 207, type: !107, scopeLine: 207, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !106, retainedNodes: !5)
+!296 = !DILocalVariable(name: "this", arg: 1, scope: !295, type: !209, flags: DIFlagArtificial | DIFlagObjectPointer)
+!297 = !DILocation(line: 0, scope: !295)
+!298 = !DILocation(line: 207, column: 57, scope: !295)
+!299 = !DILocation(line: 207, column: 50, scope: !295)
+!300 = distinct !DISubprogram(name: "coroutine_handle", linkageName: "_ZNSt7__n486116coroutine_handleIvEC2Ev", scope: !31, file: !18, line: 91, type: !36, scopeLine: 91, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !35, retainedNodes: !5)
+!301 = !DILocalVariable(name: "this", arg: 1, scope: !300, type: !302, flags: DIFlagArtificial | DIFlagObjectPointer)
+!302 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !31, size: 64)
+!303 = !DILocation(line: 0, scope: !300)
+!304 = !DILocation(line: 91, column: 47, scope: !300)
+!305 = !DILocation(line: 91, column: 61, scope: !300)
>From 1e7e4221b09fdb0ff916dab58b9866305f464bde Mon Sep 17 00:00:00 2001
From: h2h <h2h at meta.com>
Date: Mon, 5 Jan 2026 14:02:14 -0800
Subject: [PATCH 5/7] Verify pseudo_probe section for test
---
.../Transforms/SampleProfile/pseudo-probe-coro-debug-fix.ll | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/llvm/test/Transforms/SampleProfile/pseudo-probe-coro-debug-fix.ll b/llvm/test/Transforms/SampleProfile/pseudo-probe-coro-debug-fix.ll
index 271b665dae435..74de206ad45fe 100644
--- a/llvm/test/Transforms/SampleProfile/pseudo-probe-coro-debug-fix.ll
+++ b/llvm/test/Transforms/SampleProfile/pseudo-probe-coro-debug-fix.ll
@@ -6,8 +6,10 @@
; RUN: llc -mtriple=x86_64 < %t.ll --filetype=obj -o %t.obj
; RUN: obj2yaml %t.obj | FileCheck -check-prefix=OBJ --match-full-lines %s
-; OBJ: - Name: .pseudo_probe_desc{{$}}
+; OBJ: - Name: '.pseudo_probe (21)'{{$}}
; OBJ-NEXT: Type: SHT_PROGBITS{{$}}
+; OBJ-NEXT: Flags: [ SHF_LINK_ORDER ]{{$}}
+; OBJ-NEXT: Link: .text{{$}}
; OBJ-NEXT: AddressAlign: 0x1{{$}}
; OBJ-NEXT: Content: 7B340AC7FC888D7F{{[0-9A-F]+$}}
>From 509d61813d089d35a19931232d7f295fcad1860f Mon Sep 17 00:00:00 2001
From: h2h <h2h at meta.com>
Date: Tue, 6 Jan 2026 16:34:43 -0800
Subject: [PATCH 6/7] Reduce test case
---
.../pseudo-probe-coro-debug-fix.ll | 955 +++---------------
1 file changed, 139 insertions(+), 816 deletions(-)
diff --git a/llvm/test/Transforms/SampleProfile/pseudo-probe-coro-debug-fix.ll b/llvm/test/Transforms/SampleProfile/pseudo-probe-coro-debug-fix.ll
index 74de206ad45fe..172c09044e966 100644
--- a/llvm/test/Transforms/SampleProfile/pseudo-probe-coro-debug-fix.ll
+++ b/llvm/test/Transforms/SampleProfile/pseudo-probe-coro-debug-fix.ll
@@ -1,4 +1,4 @@
-; RUN: opt < %s -passes='pseudo-probe,cgscc(coro-split),coro-cleanup,always-inline,early-cse' -mtriple=x86_64 -pass-remarks=inline -S -o %t.ll
+; RUN: opt < %s -passes='pseudo-probe,cgscc(coro-split),coro-cleanup,always-inline' -mtriple=x86_64 -pass-remarks=inline -S -o %t.ll
; RUN: llc -mtriple=x86_64 -stop-after=pseudo-probe-inserter < %t.ll --filetype=asm -o - | FileCheck -check-prefix=MIR %s
; MIR-NOT: PSEUDO_PROBE 4448042984153125393,
; MIR-NOT: PSEUDO_PROBE 3532999944647676065,
@@ -6,7 +6,7 @@
; RUN: llc -mtriple=x86_64 < %t.ll --filetype=obj -o %t.obj
; RUN: obj2yaml %t.obj | FileCheck -check-prefix=OBJ --match-full-lines %s
-; OBJ: - Name: '.pseudo_probe (21)'{{$}}
+; OBJ: - Name: '.pseudo_probe (1)'{{$}}
; OBJ-NEXT: Type: SHT_PROGBITS{{$}}
; OBJ-NEXT: Flags: [ SHF_LINK_ORDER ]{{$}}
; OBJ-NEXT: Link: .text{{$}}
@@ -14,7 +14,7 @@
; OBJ-NEXT: Content: 7B340AC7FC888D7F{{[0-9A-F]+$}}
-; Original source code:
+; Reduced from original source code:
; clang++ -S -g -O0 SampleProfile/Inputs/pseudo-probe-coro-debug-fix.cpp -emit-llvm -Xclang -disable-llvm-passes -std=c++20 -o SampleProfile/pseudo-probe-coro-debug-fix.ll
;
; #include <coroutine>
@@ -52,53 +52,11 @@ target triple = "x86_64-redhat-linux-gnu"
%"struct.std::__n4861::suspend_never" = type { i8 }
%struct.co_sleep = type { i32 }
%"struct.std::__n4861::suspend_always" = type { i8 }
-%"struct.std::__n4861::coroutine_handle" = type { ptr }
-%"struct.std::__n4861::coroutine_handle.0" = type { ptr }
$__clang_call_terminate = comdat any
-$_ZN4Task12promise_type17get_return_objectEv = comdat any
-
-$_ZN4Task12promise_type15initial_suspendEv = comdat any
-
-$_ZNKSt7__n486113suspend_never11await_readyEv = comdat any
-
-$_ZNKSt7__n486113suspend_never13await_suspendENS_16coroutine_handleIvEE = comdat any
-
-$_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEE12from_addressEPv = comdat any
-
-$_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEcvNS0_IvEEEv = comdat any
-
-$_ZNKSt7__n486113suspend_never12await_resumeEv = comdat any
-
-$_ZN8co_sleepC2Ei = comdat any
-
-$_ZNK8co_sleep11await_readyEv = comdat any
-
-$_ZNK8co_sleep13await_suspendENSt7__n486116coroutine_handleIvEE = comdat any
-
-$_ZNK8co_sleep12await_resumeEv = comdat any
-
-$_ZN4Task12promise_type19unhandled_exceptionEv = comdat any
-
-$_ZN4Task12promise_type13final_suspendEv = comdat any
-
-$_ZNKSt7__n486114suspend_always11await_readyEv = comdat any
-
-$_ZNKSt7__n486114suspend_always13await_suspendENS_16coroutine_handleIvEE = comdat any
-
-$_ZNKSt7__n486114suspend_always12await_resumeEv = comdat any
-
-$_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEEC2Ev = comdat any
-
-$_ZNSt7__n486116coroutine_handleIvE12from_addressEPv = comdat any
-
-$_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEE7addressEv = comdat any
-
-$_ZNSt7__n486116coroutine_handleIvEC2Ev = comdat any
-
; Function Attrs: mustprogress noinline nounwind optnone presplitcoroutine uwtable
-define dso_local void @_Z3foov() #0 personality ptr @__gxx_personality_v0 !dbg !156 {
+define dso_local void @_Z3foov() #0 personality ptr @__gxx_personality_v0 !dbg !30 {
entry:
%__promise = alloca %"struct.Task::promise_type", align 1
%undef.agg.tmp = alloca %struct.Task, align 1
@@ -109,182 +67,96 @@ entry:
%ehselector.slot = alloca i32, align 4
%ref.tmp13 = alloca %"struct.std::__n4861::suspend_always", align 1
%undef.agg.tmp14 = alloca %"struct.std::__n4861::suspend_always", align 1
- %0 = call token @llvm.coro.id(i32 16, ptr %__promise, ptr null, ptr null), !dbg !159
- %1 = call i1 @llvm.coro.alloc(token %0), !dbg !159
- br i1 %1, label %coro.alloc, label %coro.init, !dbg !159
+ %0 = call token @llvm.coro.id(i32 16, ptr %__promise, ptr null, ptr null), !dbg !33
+ %1 = call i1 @llvm.coro.alloc(token %0), !dbg !33
+ br i1 %1, label %coro.alloc, label %coro.init, !dbg !33
coro.alloc: ; preds = %entry
- %2 = call i64 @llvm.coro.size.i64(), !dbg !160
- %call = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef %2) #13
- to label %invoke.cont unwind label %terminate.lpad, !dbg !160
+ %2 = call i64 @llvm.coro.size.i64(), !dbg !34
+ %call = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef %2) #12
+ to label %invoke.cont unwind label %terminate.lpad, !dbg !34
invoke.cont: ; preds = %coro.alloc
- br label %coro.init, !dbg !159
+ br label %coro.init, !dbg !33
coro.init: ; preds = %invoke.cont, %entry
- %3 = phi ptr [ null, %entry ], [ %call, %invoke.cont ], !dbg !159
- %4 = call ptr @llvm.coro.begin(token %0, ptr %3), !dbg !159
- call void @llvm.lifetime.start.p0(ptr %__promise) #2, !dbg !160
- #dbg_declare(ptr %__promise, !161, !DIExpression(), !167)
- invoke void @_ZN4Task12promise_type17get_return_objectEv(ptr noundef nonnull align 1 dereferenceable(1) %__promise)
- to label %invoke.cont1 unwind label %terminate.lpad, !dbg !160
-
-invoke.cont1: ; preds = %coro.init
- call void @llvm.lifetime.start.p0(ptr %ref.tmp) #2, !dbg !160
- invoke void @_ZN4Task12promise_type15initial_suspendEv(ptr noundef nonnull align 1 dereferenceable(1) %__promise)
- to label %invoke.cont2 unwind label %terminate.lpad, !dbg !160
-
-invoke.cont2: ; preds = %invoke.cont1
- %call4 = call noundef zeroext i1 @_ZNKSt7__n486113suspend_never11await_readyEv(ptr noundef nonnull align 1 dereferenceable(1) %ref.tmp) #2, !dbg !160
- br i1 %call4, label %init.ready, label %init.suspend, !dbg !160
-
-init.suspend: ; preds = %invoke.cont2
- %5 = call token @llvm.coro.save(ptr null), !dbg !160
- call void @llvm.coro.await.suspend.void(ptr %ref.tmp, ptr %4, ptr @_Z3foov.__await_suspend_wrapper__init) #2, !dbg !160
- %6 = call i8 @llvm.coro.suspend(token %5, i1 false), !dbg !160
+ %3 = phi ptr [ null, %entry ], [ %call, %invoke.cont ], !dbg !33
+ %4 = call ptr @llvm.coro.begin(token %0, ptr %3), !dbg !33
+ call void @llvm.lifetime.start.p0(ptr %__promise) #2, !dbg !34
+ #dbg_declare(ptr %__promise, !35, !DIExpression(), !41)
+ call void @llvm.lifetime.start.p0(ptr %ref.tmp5) #2, !dbg !42
+ %5 = call token @llvm.coro.save(ptr null), !dbg !44
+ call void @llvm.coro.await.suspend.void(ptr %ref.tmp5, ptr %4, ptr @_Z3foov.__await_suspend_wrapper__await) #2, !dbg !44
+ %6 = call i8 @llvm.coro.suspend(token %5, i1 false), !dbg !44
switch i8 %6, label %coro.ret [
- i8 0, label %init.ready
- i8 1, label %init.cleanup
- ], !dbg !160
-
-init.cleanup: ; preds = %init.suspend
- br label %cleanup, !dbg !160
-
-init.ready: ; preds = %init.suspend, %invoke.cont2
- call void @_ZNKSt7__n486113suspend_never12await_resumeEv(ptr noundef nonnull align 1 dereferenceable(1) %ref.tmp) #2, !dbg !160
- br label %cleanup, !dbg !160
-
-cleanup: ; preds = %init.ready, %init.cleanup
- %cleanup.dest.slot.0 = phi i32 [ 0, %init.ready ], [ 2, %init.cleanup ]
- call void @llvm.lifetime.end.p0(ptr %ref.tmp) #2, !dbg !160
- switch i32 %cleanup.dest.slot.0, label %cleanup19 [
- i32 0, label %cleanup.cont
- ]
-
-cleanup.cont: ; preds = %cleanup
- call void @llvm.lifetime.start.p0(ptr %ref.tmp5) #2, !dbg !168
- invoke void @_ZN8co_sleepC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %ref.tmp5, i32 noundef 10)
- to label %invoke.cont6 unwind label %lpad, !dbg !168
+ i8 0, label %cleanup8
+ i8 1, label %await.cleanup
+ ], !dbg !44
-invoke.cont6: ; preds = %cleanup.cont
- %call7 = call noundef zeroext i1 @_ZNK8co_sleep11await_readyEv(ptr noundef nonnull align 4 dereferenceable(4) %ref.tmp5) #2, !dbg !168
- br i1 %call7, label %await.ready, label %await.suspend, !dbg !170
+await.cleanup: ; preds = %coro.init
+ br label %cleanup8, !dbg !44
-await.suspend: ; preds = %invoke.cont6
- %7 = call token @llvm.coro.save(ptr null), !dbg !170
- call void @llvm.coro.await.suspend.void(ptr %ref.tmp5, ptr %4, ptr @_Z3foov.__await_suspend_wrapper__await) #2, !dbg !170
- %8 = call i8 @llvm.coro.suspend(token %7, i1 false), !dbg !170
+coro.final: ; preds = %cleanup8
+ call void @llvm.lifetime.start.p0(ptr %ref.tmp13) #2, !dbg !34
+ %7 = call token @llvm.coro.save(ptr null), !dbg !34
+ call void @llvm.coro.await.suspend.void(ptr %ref.tmp13, ptr %4, ptr @_Z3foov.__await_suspend_wrapper__final) #2, !dbg !34
+ %8 = call i8 @llvm.coro.suspend(token %7, i1 true), !dbg !34
switch i8 %8, label %coro.ret [
- i8 0, label %await.ready
- i8 1, label %await.cleanup
- ], !dbg !170
-
-await.cleanup: ; preds = %await.suspend
- br label %cleanup8, !dbg !170
-
-lpad: ; preds = %cleanup.cont
- %9 = landingpad { ptr, i32 }
- catch ptr null, !dbg !171
- %10 = extractvalue { ptr, i32 } %9, 0, !dbg !171
- store ptr %10, ptr %exn.slot, align 8, !dbg !171
- %11 = extractvalue { ptr, i32 } %9, 1, !dbg !171
- store i32 %11, ptr %ehselector.slot, align 4, !dbg !171
- call void @llvm.lifetime.end.p0(ptr %ref.tmp5) #2, !dbg !170
- br label %catch, !dbg !170
-
-catch: ; preds = %lpad
- %exn = load ptr, ptr %exn.slot, align 8, !dbg !171
- %12 = call ptr @__cxa_begin_catch(ptr %exn) #2, !dbg !171
- invoke void @_ZN4Task12promise_type19unhandled_exceptionEv(ptr noundef nonnull align 1 dereferenceable(1) %__promise)
- to label %invoke.cont11 unwind label %terminate.lpad, !dbg !160
-
-invoke.cont11: ; preds = %catch
- invoke void @__cxa_end_catch()
- to label %invoke.cont12 unwind label %terminate.lpad, !dbg !160
-
-invoke.cont12: ; preds = %invoke.cont11
- br label %try.cont, !dbg !160
-
-try.cont: ; preds = %invoke.cont12, %cleanup.cont10
- br label %coro.final, !dbg !160
-
-coro.final: ; preds = %try.cont
- call void @llvm.lifetime.start.p0(ptr %ref.tmp13) #2, !dbg !160
- call void @_ZN4Task12promise_type13final_suspendEv(ptr noundef nonnull align 1 dereferenceable(1) %__promise) #2, !dbg !160
- %call15 = call noundef zeroext i1 @_ZNKSt7__n486114suspend_always11await_readyEv(ptr noundef nonnull align 1 dereferenceable(1) %ref.tmp13) #2, !dbg !160
- br i1 %call15, label %final.ready, label %final.suspend, !dbg !160
-
-final.suspend: ; preds = %coro.final
- %13 = call token @llvm.coro.save(ptr null), !dbg !160
- call void @llvm.coro.await.suspend.void(ptr %ref.tmp13, ptr %4, ptr @_Z3foov.__await_suspend_wrapper__final) #2, !dbg !160
- %14 = call i8 @llvm.coro.suspend(token %13, i1 true), !dbg !160
- switch i8 %14, label %coro.ret [
- i8 0, label %final.ready
+ i8 0, label %cleanup16
i8 1, label %final.cleanup
- ], !dbg !160
-
-final.cleanup: ; preds = %final.suspend
- br label %cleanup16, !dbg !160
+ ], !dbg !34
-await.ready: ; preds = %await.suspend, %invoke.cont6
- call void @_ZNK8co_sleep12await_resumeEv(ptr noundef nonnull align 4 dereferenceable(4) %ref.tmp5) #2, !dbg !168
- br label %cleanup8, !dbg !170
+final.cleanup: ; preds = %coro.final
+ br label %cleanup16, !dbg !34
-cleanup8: ; preds = %await.ready, %await.cleanup
- %cleanup.dest.slot.1 = phi i32 [ 0, %await.ready ], [ 2, %await.cleanup ]
- call void @llvm.lifetime.end.p0(ptr %ref.tmp5) #2, !dbg !170
+cleanup8: ; preds = %await.cleanup, %coro.init
+ %cleanup.dest.slot.1 = phi i32 [ 0, %coro.init ], [ 2, %await.cleanup ]
+ call void @llvm.lifetime.end.p0(ptr %ref.tmp5) #2, !dbg !44
switch i32 %cleanup.dest.slot.1, label %cleanup19 [
- i32 0, label %cleanup.cont10
+ i32 0, label %coro.final
]
-cleanup.cont10: ; preds = %cleanup8
- br label %try.cont, !dbg !171
-
-final.ready: ; preds = %final.suspend, %coro.final
- call void @_ZNKSt7__n486114suspend_always12await_resumeEv(ptr noundef nonnull align 1 dereferenceable(1) %ref.tmp13) #2, !dbg !160
- br label %cleanup16, !dbg !160
-
-cleanup16: ; preds = %final.ready, %final.cleanup
- %cleanup.dest.slot.2 = phi i32 [ 0, %final.ready ], [ 2, %final.cleanup ]
- call void @llvm.lifetime.end.p0(ptr %ref.tmp13) #2, !dbg !160
+cleanup16: ; preds = %final.cleanup, %coro.final
+ %cleanup.dest.slot.2 = phi i32 [ 0, %coro.final ], [ 2, %final.cleanup ]
+ call void @llvm.lifetime.end.p0(ptr %ref.tmp13) #2, !dbg !34
switch i32 %cleanup.dest.slot.2, label %cleanup19 [
i32 0, label %cleanup.cont18
]
cleanup.cont18: ; preds = %cleanup16
- br label %cleanup19, !dbg !160
+ br label %cleanup19, !dbg !34
-cleanup19: ; preds = %cleanup.cont18, %cleanup16, %cleanup8, %cleanup
- %cleanup.dest.slot.3 = phi i32 [ %cleanup.dest.slot.0, %cleanup ], [ %cleanup.dest.slot.1, %cleanup8 ], [ %cleanup.dest.slot.2, %cleanup16 ], [ 0, %cleanup.cont18 ], !dbg !167
- call void @llvm.lifetime.end.p0(ptr %__promise) #2, !dbg !160
- %15 = call ptr @llvm.coro.free(token %0, ptr %4), !dbg !160
- %16 = icmp ne ptr %15, null, !dbg !160
- br i1 %16, label %coro.free, label %after.coro.free, !dbg !160
+cleanup19: ; preds = %cleanup.cont18, %cleanup16, %cleanup8
+ %cleanup.dest.slot.3 = phi i32 [ %cleanup.dest.slot.1, %cleanup8 ], [ %cleanup.dest.slot.2, %cleanup16 ], [ 0, %cleanup.cont18 ], !dbg !41
+ call void @llvm.lifetime.end.p0(ptr %__promise) #2, !dbg !34
+ %9 = call ptr @llvm.coro.free(token %0, ptr %4), !dbg !34
+ %10 = icmp ne ptr %9, null, !dbg !34
+ br i1 %10, label %coro.free, label %after.coro.free, !dbg !34
coro.free: ; preds = %cleanup19
- %17 = call i64 @llvm.coro.size.i64(), !dbg !160
- call void @_ZdlPvm(ptr noundef %15, i64 noundef %17) #2, !dbg !160
- br label %after.coro.free, !dbg !160
+ %11 = call i64 @llvm.coro.size.i64(), !dbg !34
+ call void @_ZdlPvm(ptr noundef %9, i64 noundef %11) #2, !dbg !34
+ br label %after.coro.free, !dbg !34
-after.coro.free: ; preds = %cleanup19, %coro.free
+after.coro.free: ; preds = %coro.free, %cleanup19
switch i32 %cleanup.dest.slot.3, label %unreachable [
i32 0, label %cleanup.cont22
i32 2, label %coro.ret
]
cleanup.cont22: ; preds = %after.coro.free
- br label %coro.ret, !dbg !160
+ br label %coro.ret, !dbg !34
-coro.ret: ; preds = %cleanup.cont22, %after.coro.free, %final.suspend, %await.suspend, %init.suspend
- call void @llvm.coro.end(ptr null, i1 false, token none), !dbg !160
- ret void, !dbg !160
+coro.ret: ; preds = %cleanup.cont22, %after.coro.free, %coro.final, %coro.init
+ call void @llvm.coro.end(ptr null, i1 false, token none), !dbg !34
+ ret void, !dbg !34
-terminate.lpad: ; preds = %invoke.cont11, %catch, %invoke.cont1, %coro.init, %coro.alloc
- %18 = landingpad { ptr, i32 }
- catch ptr null, !dbg !160
- %19 = extractvalue { ptr, i32 } %18, 0, !dbg !160
- call void @__clang_call_terminate(ptr %19) #14, !dbg !160
- unreachable, !dbg !160
+terminate.lpad: ; preds = %coro.alloc
+ %12 = landingpad { ptr, i32 }
+ catch ptr null, !dbg !34
+ %13 = extractvalue { ptr, i32 } %12, 0, !dbg !34
+ call void @__clang_call_terminate(ptr %13) #13, !dbg !34
+ unreachable, !dbg !34
unreachable: ; preds = %after.coro.free
unreachable
@@ -307,7 +179,7 @@ declare dso_local i32 @__gxx_personality_v0(...)
; Function Attrs: noinline noreturn nounwind uwtable
define linkonce_odr hidden void @__clang_call_terminate(ptr noundef %0) #5 comdat {
%2 = call ptr @__cxa_begin_catch(ptr %0) #2
- call void @_ZSt9terminatev() #14
+ call void @_ZSt9terminatev() #13
unreachable
}
@@ -321,110 +193,14 @@ declare ptr @llvm.coro.begin(token, ptr writeonly) #2
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(ptr captures(none)) #6
-; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local void @_ZN4Task12promise_type17get_return_objectEv(ptr noundef nonnull align 1 dereferenceable(1) %this) #7 comdat align 2 !dbg !172 {
-entry:
- %this.addr = alloca ptr, align 8
- store ptr %this, ptr %this.addr, align 8
- #dbg_declare(ptr %this.addr, !173, !DIExpression(), !175)
- %this1 = load ptr, ptr %this.addr, align 8
- ret void, !dbg !176
-}
-
-; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local void @_ZN4Task12promise_type15initial_suspendEv(ptr noundef nonnull align 1 dereferenceable(1) %this) #7 comdat align 2 !dbg !177 {
-entry:
- %this.addr = alloca ptr, align 8
- store ptr %this, ptr %this.addr, align 8
- #dbg_declare(ptr %this.addr, !178, !DIExpression(), !179)
- %this1 = load ptr, ptr %this.addr, align 8
- ret void, !dbg !180
-}
-
-; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local noundef zeroext i1 @_ZNKSt7__n486113suspend_never11await_readyEv(ptr noundef nonnull align 1 dereferenceable(1) %this) #7 comdat align 2 !dbg !181 {
-entry:
- %this.addr = alloca ptr, align 8
- store ptr %this, ptr %this.addr, align 8
- #dbg_declare(ptr %this.addr, !182, !DIExpression(), !184)
- %this1 = load ptr, ptr %this.addr, align 8
- ret i1 true, !dbg !185
-}
-
; Function Attrs: nomerge nounwind
-declare token @llvm.coro.save(ptr) #8
+declare token @llvm.coro.save(ptr) #7
; Function Attrs: alwaysinline mustprogress
-define internal void @_Z3foov.__await_suspend_wrapper__init(ptr noundef nonnull %0, ptr noundef %1) #9 !dbg !186 {
-entry:
- %.addr = alloca ptr, align 8
- %.addr1 = alloca ptr, align 8
- %agg.tmp = alloca %"struct.std::__n4861::coroutine_handle", align 8
- %ref.tmp = alloca %"struct.std::__n4861::coroutine_handle.0", align 8
- store ptr %0, ptr %.addr, align 8
- #dbg_declare(ptr %.addr, !188, !DIExpression(), !189)
- store ptr %1, ptr %.addr1, align 8
- #dbg_declare(ptr %.addr1, !190, !DIExpression(), !189)
- %2 = load ptr, ptr %.addr, align 8
- %3 = load ptr, ptr %.addr1, align 8
- %call = call ptr @_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEE12from_addressEPv(ptr noundef %3) #2, !dbg !191
- %coerce.dive = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %ref.tmp, i32 0, i32 0, !dbg !191
- store ptr %call, ptr %coerce.dive, align 8, !dbg !191
- %call2 = call ptr @_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEcvNS0_IvEEEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp) #2, !dbg !191
- %coerce.dive3 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp, i32 0, i32 0, !dbg !191
- store ptr %call2, ptr %coerce.dive3, align 8, !dbg !191
- %coerce.dive4 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp, i32 0, i32 0, !dbg !191
- %4 = load ptr, ptr %coerce.dive4, align 8, !dbg !191
- call void @_ZNKSt7__n486113suspend_never13await_suspendENS_16coroutine_handleIvEE(ptr noundef nonnull align 1 dereferenceable(1) %2, ptr %4) #2, !dbg !191
- ret void, !dbg !191
-}
-
-; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local void @_ZNKSt7__n486113suspend_never13await_suspendENS_16coroutine_handleIvEE(ptr noundef nonnull align 1 dereferenceable(1) %this, ptr %.coerce) #7 comdat align 2 !dbg !192 {
+define internal void @_Z3foov.__await_suspend_wrapper__init(ptr noundef nonnull %0, ptr noundef %1) #8 !dbg !45 {
entry:
- %0 = alloca %"struct.std::__n4861::coroutine_handle", align 8
- %this.addr = alloca ptr, align 8
- %coerce.dive = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %0, i32 0, i32 0
- store ptr %.coerce, ptr %coerce.dive, align 8
- store ptr %this, ptr %this.addr, align 8
- #dbg_declare(ptr %this.addr, !193, !DIExpression(), !194)
- #dbg_declare(ptr %0, !195, !DIExpression(), !196)
- %this1 = load ptr, ptr %this.addr, align 8
- ret void, !dbg !197
-}
-
-; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local ptr @_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEE12from_addressEPv(ptr noundef %__a) #7 comdat align 2 !dbg !198 {
-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
- #dbg_declare(ptr %__a.addr, !199, !DIExpression(), !200)
- #dbg_declare(ptr %retval, !201, !DIExpression(), !202)
- call void @_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %retval) #2, !dbg !202
- %0 = load ptr, ptr %__a.addr, align 8, !dbg !203
- %_M_fr_ptr = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %retval, i32 0, i32 0, !dbg !204
- store ptr %0, ptr %_M_fr_ptr, align 8, !dbg !205
- %coerce.dive = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %retval, i32 0, i32 0, !dbg !206
- %1 = load ptr, ptr %coerce.dive, align 8, !dbg !206
- ret ptr %1, !dbg !206
-}
-
-; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local ptr @_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEcvNS0_IvEEEv(ptr noundef nonnull align 8 dereferenceable(8) %this) #7 comdat align 2 !dbg !207 {
-entry:
- %retval = alloca %"struct.std::__n4861::coroutine_handle", align 8
- %this.addr = alloca ptr, align 8
- store ptr %this, ptr %this.addr, align 8
- #dbg_declare(ptr %this.addr, !208, !DIExpression(), !210)
- %this1 = load ptr, ptr %this.addr, align 8
- %call = call noundef ptr @_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEE7addressEv(ptr noundef nonnull align 8 dereferenceable(8) %this1) #2, !dbg !211
- %call2 = call ptr @_ZNSt7__n486116coroutine_handleIvE12from_addressEPv(ptr noundef %call) #2, !dbg !212
- %coerce.dive = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %retval, i32 0, i32 0, !dbg !212
- store ptr %call2, ptr %coerce.dive, align 8, !dbg !212
- %coerce.dive3 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %retval, i32 0, i32 0, !dbg !213
- %0 = load ptr, ptr %coerce.dive3, align 8, !dbg !213
- ret ptr %0, !dbg !213
+ call void @_ZSt9terminatev() #13
+ ret void, !dbg !47
}
declare void @llvm.coro.await.suspend.void(ptr, ptr, ptr)
@@ -432,243 +208,40 @@ declare void @llvm.coro.await.suspend.void(ptr, ptr, ptr)
; Function Attrs: nounwind
declare i8 @llvm.coro.suspend(token, i1) #2
-; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local void @_ZNKSt7__n486113suspend_never12await_resumeEv(ptr noundef nonnull align 1 dereferenceable(1) %this) #7 comdat align 2 !dbg !214 {
-entry:
- %this.addr = alloca ptr, align 8
- store ptr %this, ptr %this.addr, align 8
- #dbg_declare(ptr %this.addr, !215, !DIExpression(), !216)
- %this1 = load ptr, ptr %this.addr, align 8
- ret void, !dbg !217
-}
-
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(ptr captures(none)) #6
-; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local void @_ZN8co_sleepC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %this, i32 noundef %n) unnamed_addr #7 comdat align 2 !dbg !218 {
-entry:
- %this.addr = alloca ptr, align 8
- %n.addr = alloca i32, align 4
- store ptr %this, ptr %this.addr, align 8
- #dbg_declare(ptr %this.addr, !219, !DIExpression(), !221)
- store i32 %n, ptr %n.addr, align 4
- #dbg_declare(ptr %n.addr, !222, !DIExpression(), !223)
- %this1 = load ptr, ptr %this.addr, align 8
- %delay = getelementptr inbounds nuw %struct.co_sleep, ptr %this1, i32 0, i32 0, !dbg !224
- %0 = load i32, ptr %n.addr, align 4, !dbg !225
- store i32 %0, ptr %delay, align 4, !dbg !224
- ret void, !dbg !226
-}
-
-; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local noundef zeroext i1 @_ZNK8co_sleep11await_readyEv(ptr noundef nonnull align 4 dereferenceable(4) %this) #7 comdat align 2 !dbg !227 {
-entry:
- %this.addr = alloca ptr, align 8
- store ptr %this, ptr %this.addr, align 8
- #dbg_declare(ptr %this.addr, !228, !DIExpression(), !230)
- %this1 = load ptr, ptr %this.addr, align 8
- ret i1 false, !dbg !231
-}
-
; Function Attrs: alwaysinline mustprogress
-define internal void @_Z3foov.__await_suspend_wrapper__await(ptr noundef nonnull %0, ptr noundef %1) #9 !dbg !232 {
-entry:
- %.addr = alloca ptr, align 8
- %.addr1 = alloca ptr, align 8
- %agg.tmp = alloca %"struct.std::__n4861::coroutine_handle", align 8
- %ref.tmp = alloca %"struct.std::__n4861::coroutine_handle.0", align 8
- store ptr %0, ptr %.addr, align 8
- #dbg_declare(ptr %.addr, !233, !DIExpression(), !234)
- store ptr %1, ptr %.addr1, align 8
- #dbg_declare(ptr %.addr1, !235, !DIExpression(), !234)
- %2 = load ptr, ptr %.addr, align 8
- %3 = load ptr, ptr %.addr1, align 8
- %call = call ptr @_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEE12from_addressEPv(ptr noundef %3) #2, !dbg !236
- %coerce.dive = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %ref.tmp, i32 0, i32 0, !dbg !236
- store ptr %call, ptr %coerce.dive, align 8, !dbg !236
- %call2 = call ptr @_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEcvNS0_IvEEEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp) #2, !dbg !236
- %coerce.dive3 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp, i32 0, i32 0, !dbg !236
- store ptr %call2, ptr %coerce.dive3, align 8, !dbg !236
- %coerce.dive4 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp, i32 0, i32 0, !dbg !236
- %4 = load ptr, ptr %coerce.dive4, align 8, !dbg !236
- call void @_ZNK8co_sleep13await_suspendENSt7__n486116coroutine_handleIvEE(ptr noundef nonnull align 4 dereferenceable(4) %2, ptr %4) #2, !dbg !236
- ret void, !dbg !236
-}
-
-; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local void @_ZNK8co_sleep13await_suspendENSt7__n486116coroutine_handleIvEE(ptr noundef nonnull align 4 dereferenceable(4) %this, ptr %h.coerce) #7 comdat align 2 !dbg !237 {
-entry:
- %h = alloca %"struct.std::__n4861::coroutine_handle", align 8
- %this.addr = alloca ptr, align 8
- %coerce.dive = getelementptr inbounds nuw %"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
- #dbg_declare(ptr %this.addr, !238, !DIExpression(), !239)
- #dbg_declare(ptr %h, !240, !DIExpression(), !241)
- %this1 = load ptr, ptr %this.addr, align 8
- ret void, !dbg !242
-}
-
-; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local void @_ZNK8co_sleep12await_resumeEv(ptr noundef nonnull align 4 dereferenceable(4) %this) #7 comdat align 2 !dbg !243 {
+define internal void @_Z3foov.__await_suspend_wrapper__await(ptr noundef nonnull %0, ptr noundef %1) #8 !dbg !48 {
entry:
- %this.addr = alloca ptr, align 8
- store ptr %this, ptr %this.addr, align 8
- #dbg_declare(ptr %this.addr, !244, !DIExpression(), !245)
- %this1 = load ptr, ptr %this.addr, align 8
- ret void, !dbg !246
-}
-
-; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local void @_ZN4Task12promise_type19unhandled_exceptionEv(ptr noundef nonnull align 1 dereferenceable(1) %this) #7 comdat align 2 !dbg !247 {
-entry:
- %this.addr = alloca ptr, align 8
- store ptr %this, ptr %this.addr, align 8
- #dbg_declare(ptr %this.addr, !248, !DIExpression(), !249)
- %this1 = load ptr, ptr %this.addr, align 8
- ret void, !dbg !250
+ call void @_ZSt9terminatev() #13
+ ret void, !dbg !49
}
declare dso_local void @__cxa_end_catch()
-; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local void @_ZN4Task12promise_type13final_suspendEv(ptr noundef nonnull align 1 dereferenceable(1) %this) #7 comdat align 2 !dbg !251 {
-entry:
- %this.addr = alloca ptr, align 8
- store ptr %this, ptr %this.addr, align 8
- #dbg_declare(ptr %this.addr, !252, !DIExpression(), !253)
- %this1 = load ptr, ptr %this.addr, align 8
- ret void, !dbg !254
-}
-
-; Function Attrs: mustprogress noinline nounwind optnone 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 !dbg !255 {
-entry:
- %this.addr = alloca ptr, align 8
- store ptr %this, ptr %this.addr, align 8
- #dbg_declare(ptr %this.addr, !256, !DIExpression(), !258)
- %this1 = load ptr, ptr %this.addr, align 8
- ret i1 false, !dbg !259
-}
-
; Function Attrs: alwaysinline mustprogress
-define internal void @_Z3foov.__await_suspend_wrapper__final(ptr noundef nonnull %0, ptr noundef %1) #9 !dbg !260 {
-entry:
- %.addr = alloca ptr, align 8
- %.addr1 = alloca ptr, align 8
- %agg.tmp = alloca %"struct.std::__n4861::coroutine_handle", align 8
- %ref.tmp = alloca %"struct.std::__n4861::coroutine_handle.0", align 8
- store ptr %0, ptr %.addr, align 8
- #dbg_declare(ptr %.addr, !261, !DIExpression(), !262)
- store ptr %1, ptr %.addr1, align 8
- #dbg_declare(ptr %.addr1, !263, !DIExpression(), !262)
- %2 = load ptr, ptr %.addr, align 8
- %3 = load ptr, ptr %.addr1, align 8
- %call = call ptr @_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEE12from_addressEPv(ptr noundef %3) #2, !dbg !264
- %coerce.dive = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %ref.tmp, i32 0, i32 0, !dbg !264
- store ptr %call, ptr %coerce.dive, align 8, !dbg !264
- %call2 = call ptr @_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEcvNS0_IvEEEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp) #2, !dbg !264
- %coerce.dive3 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp, i32 0, i32 0, !dbg !264
- store ptr %call2, ptr %coerce.dive3, align 8, !dbg !264
- %coerce.dive4 = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp, i32 0, i32 0, !dbg !264
- %4 = load ptr, ptr %coerce.dive4, align 8, !dbg !264
- call void @_ZNKSt7__n486114suspend_always13await_suspendENS_16coroutine_handleIvEE(ptr noundef nonnull align 1 dereferenceable(1) %2, ptr %4) #2, !dbg !264
- ret void, !dbg !264
-}
-
-; Function Attrs: mustprogress noinline nounwind optnone 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 !dbg !265 {
+define internal void @_Z3foov.__await_suspend_wrapper__final(ptr noundef nonnull %0, ptr noundef %1) #8 !dbg !50 {
entry:
- %0 = alloca %"struct.std::__n4861::coroutine_handle", align 8
- %this.addr = alloca ptr, align 8
- %coerce.dive = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %0, i32 0, i32 0
- store ptr %.coerce, ptr %coerce.dive, align 8
- store ptr %this, ptr %this.addr, align 8
- #dbg_declare(ptr %this.addr, !266, !DIExpression(), !267)
- #dbg_declare(ptr %0, !268, !DIExpression(), !269)
- %this1 = load ptr, ptr %this.addr, align 8
- ret void, !dbg !270
-}
-
-; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local void @_ZNKSt7__n486114suspend_always12await_resumeEv(ptr noundef nonnull align 1 dereferenceable(1) %this) #7 comdat align 2 !dbg !271 {
-entry:
- %this.addr = alloca ptr, align 8
- store ptr %this, ptr %this.addr, align 8
- #dbg_declare(ptr %this.addr, !272, !DIExpression(), !273)
- %this1 = load ptr, ptr %this.addr, align 8
- ret void, !dbg !274
+ call void @_ZSt9terminatev() #13
+ ret void, !dbg !51
}
; Function Attrs: nobuiltin nounwind
-declare dso_local void @_ZdlPvm(ptr noundef, i64 noundef) #10
+declare dso_local void @_ZdlPvm(ptr noundef, i64 noundef) #9
; Function Attrs: nounwind memory(argmem: read)
-declare ptr @llvm.coro.free(token, ptr readonly captures(none)) #11
+declare ptr @llvm.coro.free(token, ptr readonly captures(none)) #10
; Function Attrs: nounwind
declare void @llvm.coro.end(ptr, i1, token) #2
; Function Attrs: mustprogress noinline norecurse nounwind optnone uwtable
-define dso_local noundef i32 @main() #12 !dbg !275 {
+define dso_local noundef i32 @main() #11 !dbg !52 {
entry:
%undef.agg.tmp = alloca %struct.Task, align 1
- call void @_Z3foov() #2, !dbg !278
- ret i32 0, !dbg !279
-}
-
-; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local void @_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %this) unnamed_addr #7 comdat align 2 !dbg !280 {
-entry:
- %this.addr = alloca ptr, align 8
- store ptr %this, ptr %this.addr, align 8
- #dbg_declare(ptr %this.addr, !281, !DIExpression(), !283)
- %this1 = load ptr, ptr %this.addr, align 8
- %_M_fr_ptr = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %this1, i32 0, i32 0, !dbg !284
- store ptr null, ptr %_M_fr_ptr, align 8, !dbg !284
- ret void, !dbg !285
-}
-
-; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local ptr @_ZNSt7__n486116coroutine_handleIvE12from_addressEPv(ptr noundef %__a) #7 comdat align 2 !dbg !286 {
-entry:
- %retval = alloca %"struct.std::__n4861::coroutine_handle", align 8
- %__a.addr = alloca ptr, align 8
- store ptr %__a, ptr %__a.addr, align 8
- #dbg_declare(ptr %__a.addr, !287, !DIExpression(), !288)
- #dbg_declare(ptr %retval, !289, !DIExpression(), !290)
- call void @_ZNSt7__n486116coroutine_handleIvEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %retval) #2, !dbg !290
- %0 = load ptr, ptr %__a.addr, align 8, !dbg !291
- %_M_fr_ptr = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %retval, i32 0, i32 0, !dbg !292
- store ptr %0, ptr %_M_fr_ptr, align 8, !dbg !293
- %coerce.dive = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %retval, i32 0, i32 0, !dbg !294
- %1 = load ptr, ptr %coerce.dive, align 8, !dbg !294
- ret ptr %1, !dbg !294
-}
-
-; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local noundef ptr @_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEE7addressEv(ptr noundef nonnull align 8 dereferenceable(8) %this) #7 comdat align 2 !dbg !295 {
-entry:
- %this.addr = alloca ptr, align 8
- store ptr %this, ptr %this.addr, align 8
- #dbg_declare(ptr %this.addr, !296, !DIExpression(), !297)
- %this1 = load ptr, ptr %this.addr, align 8
- %_M_fr_ptr = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle.0", ptr %this1, i32 0, i32 0, !dbg !298
- %0 = load ptr, ptr %_M_fr_ptr, align 8, !dbg !298
- ret ptr %0, !dbg !299
-}
-
-; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local void @_ZNSt7__n486116coroutine_handleIvEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %this) unnamed_addr #7 comdat align 2 !dbg !300 {
-entry:
- %this.addr = alloca ptr, align 8
- store ptr %this, ptr %this.addr, align 8
- #dbg_declare(ptr %this.addr, !301, !DIExpression(), !303)
- %this1 = load ptr, ptr %this.addr, align 8
- %_M_fr_ptr = getelementptr inbounds nuw %"struct.std::__n4861::coroutine_handle", ptr %this1, i32 0, i32 0, !dbg !304
- store ptr null, ptr %_M_fr_ptr, align 8, !dbg !304
- ret void, !dbg !305
+ call void @_Z3foov() #2, !dbg !55
+ ret i32 0, !dbg !56
}
attributes #0 = { mustprogress noinline nounwind optnone presplitcoroutine uwtable "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
@@ -678,322 +251,72 @@ attributes #3 = { nobuiltin allocsize(0) "frame-pointer"="all" "no-trapping-math
attributes #4 = { nounwind memory(none) }
attributes #5 = { noinline noreturn nounwind uwtable "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
-attributes #7 = { mustprogress noinline nounwind optnone uwtable "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
-attributes #8 = { nomerge nounwind }
-attributes #9 = { alwaysinline mustprogress "min-legal-vector-width"="0" }
-attributes #10 = { nobuiltin nounwind "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
-attributes #11 = { nounwind memory(argmem: read) }
-attributes #12 = { mustprogress noinline norecurse nounwind optnone uwtable "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
-attributes #13 = { allocsize(0) }
-attributes #14 = { noreturn nounwind }
+attributes #7 = { nomerge nounwind }
+attributes #8 = { alwaysinline mustprogress "min-legal-vector-width"="0" }
+attributes #9 = { nobuiltin nounwind "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
+attributes #10 = { nounwind memory(argmem: read) }
+attributes #11 = { mustprogress noinline norecurse nounwind optnone uwtable "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
+attributes #12 = { allocsize(0) }
+attributes #13 = { noreturn nounwind }
!llvm.dbg.cu = !{!0}
-!llvm.module.flags = !{!150, !151, !152, !153, !154}
-!llvm.ident = !{!155}
+!llvm.module.flags = !{!24, !25, !26, !27, !28}
+!llvm.ident = !{!29}
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 22.0.0git (https://github.com/llvm/llvm-project.git fe218aab737d55dfd67f4f84118744003f45958e)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, retainedTypes: !2, splitDebugInlining: false, nameTableKind: None)
!1 = !DIFile(filename: "pseudo-probe-coro-debug-fix.cpp", directory: "/tmp", checksumkind: CSK_MD5, checksum: "601552fedf6b88dcf699ea9d066126eb")
-!2 = !{!3, !31, !88, !131}
-!3 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "promise_type", scope: !4, file: !1, line: 10, size: 8, flags: DIFlagTypePassByValue, elements: !6, identifier: "_ZTSN4Task12promise_typeE")
+!2 = !{!3, !6, !15, !20}
+!3 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "promise_type", scope: !4, file: !1, line: 10, size: 8, flags: DIFlagTypePassByValue, elements: !5, identifier: "_ZTSN4Task12promise_typeE")
!4 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Task", file: !1, line: 9, size: 8, flags: DIFlagTypePassByValue, elements: !5, identifier: "_ZTS4Task")
!5 = !{}
-!6 = !{!7, !11, !14, !71, !87}
-!7 = !DISubprogram(name: "promise_type", linkageName: "_ZN4Task12promise_typeC4Ev", scope: !3, file: !1, line: 11, type: !8, scopeLine: 11, flags: DIFlagPrototyped, spFlags: 0)
-!8 = !DISubroutineType(types: !9)
-!9 = !{null, !10}
-!10 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !3, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
-!11 = !DISubprogram(name: "get_return_object", linkageName: "_ZN4Task12promise_type17get_return_objectEv", scope: !3, file: !1, line: 12, type: !12, scopeLine: 12, flags: DIFlagPrototyped, spFlags: 0)
-!12 = !DISubroutineType(types: !13)
-!13 = !{!4, !10}
-!14 = !DISubprogram(name: "initial_suspend", linkageName: "_ZN4Task12promise_type15initial_suspendEv", scope: !3, file: !1, line: 13, type: !15, scopeLine: 13, flags: DIFlagPrototyped, spFlags: 0)
-!15 = !DISubroutineType(types: !16)
-!16 = !{!17, !10}
-!17 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "suspend_never", scope: !19, file: !18, line: 322, size: 8, flags: DIFlagTypePassByValue, elements: !21, identifier: "_ZTSNSt7__n486113suspend_neverE")
-!18 = !DIFile(filename: "/usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/coroutine", directory: "")
-!19 = !DINamespace(name: "__n4861", scope: !20, exportSymbols: true)
-!20 = !DINamespace(name: "std", scope: null)
-!21 = !{!22, !28, !68}
-!22 = !DISubprogram(name: "await_ready", linkageName: "_ZNKSt7__n486113suspend_never11await_readyEv", scope: !17, file: !18, line: 324, type: !23, scopeLine: 324, flags: DIFlagPrototyped, spFlags: 0)
-!23 = !DISubroutineType(types: !24)
-!24 = !{!25, !26}
-!25 = !DIBasicType(name: "bool", size: 8, encoding: DW_ATE_boolean)
-!26 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !27, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
-!27 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !17)
-!28 = !DISubprogram(name: "await_suspend", linkageName: "_ZNKSt7__n486113suspend_never13await_suspendENS_16coroutine_handleIvEE", scope: !17, file: !18, line: 326, type: !29, scopeLine: 326, flags: DIFlagPrototyped, spFlags: 0)
-!29 = !DISubroutineType(types: !30)
-!30 = !{null, !26, !31}
-!31 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "coroutine_handle<void>", scope: !19, file: !18, line: 87, size: 64, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !32, templateParams: !66, identifier: "_ZTSNSt7__n486116coroutine_handleIvEE")
-!32 = !{!33, !35, !39, !45, !49, !54, !57, !60, !61, !64, !65}
-!33 = !DIDerivedType(tag: DW_TAG_member, name: "_M_fr_ptr", scope: !31, file: !18, line: 131, baseType: !34, size: 64, flags: DIFlagProtected)
-!34 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 64)
-!35 = !DISubprogram(name: "coroutine_handle", linkageName: "_ZNSt7__n486116coroutine_handleIvEC4Ev", scope: !31, file: !18, line: 91, type: !36, scopeLine: 91, flags: DIFlagPrototyped, spFlags: 0)
-!36 = !DISubroutineType(types: !37)
-!37 = !{null, !38}
-!38 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !31, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
-!39 = !DISubprogram(name: "coroutine_handle", linkageName: "_ZNSt7__n486116coroutine_handleIvEC4EDn", scope: !31, file: !18, line: 93, type: !40, scopeLine: 93, flags: DIFlagPrototyped, spFlags: 0)
-!40 = !DISubroutineType(types: !41)
-!41 = !{null, !38, !42}
-!42 = !DIDerivedType(tag: DW_TAG_typedef, name: "nullptr_t", scope: !20, file: !43, line: 2445, baseType: !44)
-!43 = !DIFile(filename: "/usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/x86_64-redhat-linux/bits/c++config.h", directory: "", checksumkind: CSK_MD5, checksum: "9e5d800a0ad50a6623343c536b5593c0")
-!44 = !DIBasicType(tag: DW_TAG_unspecified_type, name: "decltype(nullptr)")
-!45 = !DISubprogram(name: "operator=", linkageName: "_ZNSt7__n486116coroutine_handleIvEaSEDn", scope: !31, file: !18, line: 97, type: !46, scopeLine: 97, flags: DIFlagPrototyped, spFlags: 0)
-!46 = !DISubroutineType(types: !47)
-!47 = !{!48, !38, !42}
-!48 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !31, size: 64)
-!49 = !DISubprogram(name: "address", linkageName: "_ZNKSt7__n486116coroutine_handleIvE7addressEv", scope: !31, file: !18, line: 105, type: !50, scopeLine: 105, flags: DIFlagPrototyped, spFlags: 0)
-!50 = !DISubroutineType(types: !51)
-!51 = !{!34, !52}
-!52 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !53, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
-!53 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !31)
-!54 = !DISubprogram(name: "from_address", linkageName: "_ZNSt7__n486116coroutine_handleIvE12from_addressEPv", scope: !31, file: !18, line: 107, type: !55, scopeLine: 107, flags: DIFlagPrototyped | DIFlagStaticMember, spFlags: 0)
-!55 = !DISubroutineType(types: !56)
-!56 = !{!31, !34}
-!57 = !DISubprogram(name: "operator bool", linkageName: "_ZNKSt7__n486116coroutine_handleIvEcvbEv", scope: !31, file: !18, line: 116, type: !58, scopeLine: 116, flags: DIFlagExplicit | DIFlagPrototyped, spFlags: 0)
-!58 = !DISubroutineType(types: !59)
-!59 = !{!25, !52}
-!60 = !DISubprogram(name: "done", linkageName: "_ZNKSt7__n486116coroutine_handleIvE4doneEv", scope: !31, file: !18, line: 121, type: !58, scopeLine: 121, flags: DIFlagPrototyped, spFlags: 0)
-!61 = !DISubprogram(name: "operator()", linkageName: "_ZNKSt7__n486116coroutine_handleIvEclEv", scope: !31, file: !18, line: 124, type: !62, scopeLine: 124, flags: DIFlagPrototyped, spFlags: 0)
-!62 = !DISubroutineType(types: !63)
-!63 = !{null, !52}
-!64 = !DISubprogram(name: "resume", linkageName: "_ZNKSt7__n486116coroutine_handleIvE6resumeEv", scope: !31, file: !18, line: 126, type: !62, scopeLine: 126, flags: DIFlagPrototyped, spFlags: 0)
-!65 = !DISubprogram(name: "destroy", linkageName: "_ZNKSt7__n486116coroutine_handleIvE7destroyEv", scope: !31, file: !18, line: 128, type: !62, scopeLine: 128, flags: DIFlagPrototyped, spFlags: 0)
-!66 = !{!67}
-!67 = !DITemplateTypeParameter(name: "_Promise", type: null, defaulted: true)
-!68 = !DISubprogram(name: "await_resume", linkageName: "_ZNKSt7__n486113suspend_never12await_resumeEv", scope: !17, file: !18, line: 328, type: !69, scopeLine: 328, flags: DIFlagPrototyped, spFlags: 0)
-!69 = !DISubroutineType(types: !70)
-!70 = !{null, !26}
-!71 = !DISubprogram(name: "final_suspend", linkageName: "_ZN4Task12promise_type13final_suspendEv", scope: !3, file: !1, line: 14, type: !72, scopeLine: 14, flags: DIFlagPrototyped, spFlags: 0)
-!72 = !DISubroutineType(types: !73)
-!73 = !{!74, !10}
-!74 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "suspend_always", scope: !19, file: !18, line: 313, size: 8, flags: DIFlagTypePassByValue, elements: !75, identifier: "_ZTSNSt7__n486114suspend_alwaysE")
-!75 = !{!76, !81, !84}
-!76 = !DISubprogram(name: "await_ready", linkageName: "_ZNKSt7__n486114suspend_always11await_readyEv", scope: !74, file: !18, line: 315, type: !77, scopeLine: 315, flags: DIFlagPrototyped, spFlags: 0)
-!77 = !DISubroutineType(types: !78)
-!78 = !{!25, !79}
-!79 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !80, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
-!80 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !74)
-!81 = !DISubprogram(name: "await_suspend", linkageName: "_ZNKSt7__n486114suspend_always13await_suspendENS_16coroutine_handleIvEE", scope: !74, file: !18, line: 317, type: !82, scopeLine: 317, flags: DIFlagPrototyped, spFlags: 0)
-!82 = !DISubroutineType(types: !83)
-!83 = !{null, !79, !31}
-!84 = !DISubprogram(name: "await_resume", linkageName: "_ZNKSt7__n486114suspend_always12await_resumeEv", scope: !74, file: !18, line: 319, type: !85, scopeLine: 319, flags: DIFlagPrototyped, spFlags: 0)
-!85 = !DISubroutineType(types: !86)
-!86 = !{null, !79}
-!87 = !DISubprogram(name: "unhandled_exception", linkageName: "_ZN4Task12promise_type19unhandled_exceptionEv", scope: !3, file: !1, line: 15, type: !8, scopeLine: 15, flags: DIFlagPrototyped, spFlags: 0)
-!88 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "coroutine_handle<Task::promise_type>", scope: !19, file: !18, line: 182, size: 64, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !89, templateParams: !129, identifier: "_ZTSNSt7__n486116coroutine_handleIN4Task12promise_typeEEE")
-!89 = !{!90, !91, !95, !98, !102, !106, !111, !114, !117, !120, !121, !124, !125, !126}
-!90 = !DIDerivedType(tag: DW_TAG_member, name: "_M_fr_ptr", scope: !88, file: !18, line: 244, baseType: !34, size: 64, flags: DIFlagPrivate)
-!91 = !DISubprogram(name: "coroutine_handle", linkageName: "_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEEC4Ev", scope: !88, file: !18, line: 186, type: !92, scopeLine: 186, flags: DIFlagPrototyped, spFlags: 0)
-!92 = !DISubroutineType(types: !93)
-!93 = !{null, !94}
-!94 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !88, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
-!95 = !DISubprogram(name: "coroutine_handle", linkageName: "_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEEC4EDn", scope: !88, file: !18, line: 188, type: !96, scopeLine: 188, flags: DIFlagPrototyped, spFlags: 0)
-!96 = !DISubroutineType(types: !97)
-!97 = !{null, !94, !42}
-!98 = !DISubprogram(name: "from_promise", linkageName: "_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEE12from_promiseERS2_", scope: !88, file: !18, line: 191, type: !99, scopeLine: 191, flags: DIFlagPrototyped | DIFlagStaticMember, spFlags: 0)
-!99 = !DISubroutineType(types: !100)
-!100 = !{!88, !101}
-!101 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !3, size: 64)
-!102 = !DISubprogram(name: "operator=", linkageName: "_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEEaSEDn", scope: !88, file: !18, line: 199, type: !103, scopeLine: 199, flags: DIFlagPrototyped, spFlags: 0)
-!103 = !DISubroutineType(types: !104)
-!104 = !{!105, !94, !42}
-!105 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !88, size: 64)
-!106 = !DISubprogram(name: "address", linkageName: "_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEE7addressEv", scope: !88, file: !18, line: 207, type: !107, scopeLine: 207, flags: DIFlagPrototyped, spFlags: 0)
-!107 = !DISubroutineType(types: !108)
-!108 = !{!34, !109}
-!109 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !110, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
-!110 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !88)
-!111 = !DISubprogram(name: "from_address", linkageName: "_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEE12from_addressEPv", scope: !88, file: !18, line: 209, type: !112, scopeLine: 209, flags: DIFlagPrototyped | DIFlagStaticMember, spFlags: 0)
-!112 = !DISubroutineType(types: !113)
-!113 = !{!88, !34}
-!114 = !DISubprogram(name: "operator coroutine_handle", linkageName: "_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEcvNS0_IvEEEv", scope: !88, file: !18, line: 217, type: !115, scopeLine: 217, flags: DIFlagPrototyped, spFlags: 0)
-!115 = !DISubroutineType(types: !116)
-!116 = !{!31, !109}
-!117 = !DISubprogram(name: "operator bool", linkageName: "_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEcvbEv", scope: !88, file: !18, line: 221, type: !118, scopeLine: 221, flags: DIFlagExplicit | DIFlagPrototyped, spFlags: 0)
-!118 = !DISubroutineType(types: !119)
-!119 = !{!25, !109}
-!120 = !DISubprogram(name: "done", linkageName: "_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEE4doneEv", scope: !88, file: !18, line: 226, type: !118, scopeLine: 226, flags: DIFlagPrototyped, spFlags: 0)
-!121 = !DISubprogram(name: "operator()", linkageName: "_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEclEv", scope: !88, file: !18, line: 229, type: !122, scopeLine: 229, flags: DIFlagPrototyped, spFlags: 0)
-!122 = !DISubroutineType(types: !123)
-!123 = !{null, !109}
-!124 = !DISubprogram(name: "resume", linkageName: "_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEE6resumeEv", scope: !88, file: !18, line: 231, type: !122, scopeLine: 231, flags: DIFlagPrototyped, spFlags: 0)
-!125 = !DISubprogram(name: "destroy", linkageName: "_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEE7destroyEv", scope: !88, file: !18, line: 233, type: !122, scopeLine: 233, flags: DIFlagPrototyped, spFlags: 0)
-!126 = !DISubprogram(name: "promise", linkageName: "_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEE7promiseEv", scope: !88, file: !18, line: 236, type: !127, scopeLine: 236, flags: DIFlagPrototyped, spFlags: 0)
-!127 = !DISubroutineType(types: !128)
-!128 = !{!101, !109}
-!129 = !{!130}
-!130 = !DITemplateTypeParameter(name: "_Promise", type: !3)
-!131 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "co_sleep", file: !1, line: 2, size: 32, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !132, identifier: "_ZTS8co_sleep")
-!132 = !{!133, !135, !139, !144, !147}
-!133 = !DIDerivedType(tag: DW_TAG_member, name: "delay", scope: !131, file: !1, line: 7, baseType: !134, size: 32)
-!134 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
-!135 = !DISubprogram(name: "co_sleep", linkageName: "_ZN8co_sleepC4Ei", scope: !131, file: !1, line: 3, type: !136, scopeLine: 3, flags: DIFlagPrototyped, spFlags: 0)
-!136 = !DISubroutineType(types: !137)
-!137 = !{null, !138, !134}
-!138 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !131, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
-!139 = !DISubprogram(name: "await_ready", linkageName: "_ZNK8co_sleep11await_readyEv", scope: !131, file: !1, line: 4, type: !140, scopeLine: 4, flags: DIFlagPrototyped, spFlags: 0)
-!140 = !DISubroutineType(types: !141)
-!141 = !{!25, !142}
-!142 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !143, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
-!143 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !131)
-!144 = !DISubprogram(name: "await_suspend", linkageName: "_ZNK8co_sleep13await_suspendENSt7__n486116coroutine_handleIvEE", scope: !131, file: !1, line: 5, type: !145, scopeLine: 5, flags: DIFlagPrototyped, spFlags: 0)
-!145 = !DISubroutineType(types: !146)
-!146 = !{null, !142, !31}
-!147 = !DISubprogram(name: "await_resume", linkageName: "_ZNK8co_sleep12await_resumeEv", scope: !131, file: !1, line: 6, type: !148, scopeLine: 6, flags: DIFlagPrototyped, spFlags: 0)
-!148 = !DISubroutineType(types: !149)
-!149 = !{null, !142}
-!150 = !{i32 7, !"Dwarf Version", i32 5}
-!151 = !{i32 2, !"Debug Info Version", i32 3}
-!152 = !{i32 1, !"wchar_size", i32 4}
-!153 = !{i32 7, !"uwtable", i32 2}
-!154 = !{i32 7, !"frame-pointer", i32 2}
-!155 = !{!"clang version 22.0.0git (https://github.com/llvm/llvm-project.git fe218aab737d55dfd67f4f84118744003f45958e)"}
-!156 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !1, file: !1, line: 18, type: !157, scopeLine: 18, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !5)
-!157 = !DISubroutineType(types: !158)
-!158 = !{!4}
-!159 = !DILocation(line: 18, column: 21, scope: !156)
-!160 = !DILocation(line: 18, column: 6, scope: !156)
-!161 = !DILocalVariable(name: "__promise", scope: !156, type: !162, flags: DIFlagArtificial)
-!162 = !DIDerivedType(tag: DW_TAG_typedef, name: "promise_type", scope: !163, file: !18, line: 75, baseType: !3)
-!163 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "__coroutine_traits_impl<Task, void>", scope: !19, file: !18, line: 72, size: 8, flags: DIFlagTypePassByValue, elements: !5, templateParams: !164, identifier: "_ZTSNSt7__n486123__coroutine_traits_implI4TaskvEE")
-!164 = !{!165, !166}
-!165 = !DITemplateTypeParameter(name: "_Result", type: !4)
-!166 = !DITemplateTypeParameter(type: null, defaulted: true)
-!167 = !DILocation(line: 0, scope: !156)
-!168 = !DILocation(line: 19, column: 12, scope: !169)
-!169 = distinct !DILexicalBlock(scope: !156, file: !1, line: 18, column: 21)
-!170 = !DILocation(line: 19, column: 3, scope: !169)
-!171 = !DILocation(line: 20, column: 1, scope: !169)
-!172 = distinct !DISubprogram(name: "get_return_object", linkageName: "_ZN4Task12promise_type17get_return_objectEv", scope: !3, file: !1, line: 12, type: !12, scopeLine: 12, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !11, retainedNodes: !5)
-!173 = !DILocalVariable(name: "this", arg: 1, scope: !172, type: !174, flags: DIFlagArtificial | DIFlagObjectPointer)
-!174 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !3, size: 64)
-!175 = !DILocation(line: 0, scope: !172)
-!176 = !DILocation(line: 12, column: 32, scope: !172)
-!177 = distinct !DISubprogram(name: "initial_suspend", linkageName: "_ZN4Task12promise_type15initial_suspendEv", scope: !3, file: !1, line: 13, type: !15, scopeLine: 13, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !14, retainedNodes: !5)
-!178 = !DILocalVariable(name: "this", arg: 1, scope: !177, type: !174, flags: DIFlagArtificial | DIFlagObjectPointer)
-!179 = !DILocation(line: 0, scope: !177)
-!180 = !DILocation(line: 13, column: 44, scope: !177)
-!181 = distinct !DISubprogram(name: "await_ready", linkageName: "_ZNKSt7__n486113suspend_never11await_readyEv", scope: !17, file: !18, line: 324, type: !23, scopeLine: 324, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !22, retainedNodes: !5)
-!182 = !DILocalVariable(name: "this", arg: 1, scope: !181, type: !183, flags: DIFlagArtificial | DIFlagObjectPointer)
-!183 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !27, size: 64)
-!184 = !DILocation(line: 0, scope: !181)
-!185 = !DILocation(line: 324, column: 51, scope: !181)
-!186 = distinct !DISubprogram(linkageName: "_Z3foov.__await_suspend_wrapper__init", scope: !1, file: !1, type: !187, flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: !0, retainedNodes: !5)
-!187 = !DISubroutineType(types: !5)
-!188 = !DILocalVariable(arg: 1, scope: !186, type: !34, flags: DIFlagArtificial)
-!189 = !DILocation(line: 0, scope: !186)
-!190 = !DILocalVariable(arg: 2, scope: !186, type: !34, flags: DIFlagArtificial)
-!191 = !DILocation(line: 18, column: 6, scope: !186)
-!192 = distinct !DISubprogram(name: "await_suspend", linkageName: "_ZNKSt7__n486113suspend_never13await_suspendENS_16coroutine_handleIvEE", scope: !17, file: !18, line: 326, type: !29, scopeLine: 326, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !28, retainedNodes: !5)
-!193 = !DILocalVariable(name: "this", arg: 1, scope: !192, type: !183, flags: DIFlagArtificial | DIFlagObjectPointer)
-!194 = !DILocation(line: 0, scope: !192)
-!195 = !DILocalVariable(arg: 2, scope: !192, file: !18, line: 326, type: !31)
-!196 = !DILocation(line: 326, column: 52, scope: !192)
-!197 = !DILocation(line: 326, column: 70, scope: !192)
-!198 = distinct !DISubprogram(name: "from_address", linkageName: "_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEE12from_addressEPv", scope: !88, file: !18, line: 209, type: !112, scopeLine: 210, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !111, retainedNodes: !5)
-!199 = !DILocalVariable(name: "__a", arg: 1, scope: !198, file: !18, line: 209, type: !34)
-!200 = !DILocation(line: 209, column: 60, scope: !198)
-!201 = !DILocalVariable(name: "__self", scope: !198, file: !18, line: 211, type: !88)
-!202 = !DILocation(line: 211, column: 19, scope: !198)
-!203 = !DILocation(line: 212, column: 21, scope: !198)
-!204 = !DILocation(line: 212, column: 9, scope: !198)
-!205 = !DILocation(line: 212, column: 19, scope: !198)
-!206 = !DILocation(line: 213, column: 2, scope: !198)
-!207 = distinct !DISubprogram(name: "operator coroutine_handle", linkageName: "_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEEcvNS0_IvEEEv", scope: !88, file: !18, line: 217, type: !115, scopeLine: 218, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !114, retainedNodes: !5)
-!208 = !DILocalVariable(name: "this", arg: 1, scope: !207, type: !209, flags: DIFlagArtificial | DIFlagObjectPointer)
-!209 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !110, size: 64)
-!210 = !DILocation(line: 0, scope: !207)
-!211 = !DILocation(line: 218, column: 49, scope: !207)
-!212 = !DILocation(line: 218, column: 16, scope: !207)
-!213 = !DILocation(line: 218, column: 9, scope: !207)
-!214 = distinct !DISubprogram(name: "await_resume", linkageName: "_ZNKSt7__n486113suspend_never12await_resumeEv", scope: !17, file: !18, line: 328, type: !69, scopeLine: 328, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !68, retainedNodes: !5)
-!215 = !DILocalVariable(name: "this", arg: 1, scope: !214, type: !183, flags: DIFlagArtificial | DIFlagObjectPointer)
-!216 = !DILocation(line: 0, scope: !214)
-!217 = !DILocation(line: 328, column: 51, scope: !214)
-!218 = distinct !DISubprogram(name: "co_sleep", linkageName: "_ZN8co_sleepC2Ei", scope: !131, file: !1, line: 3, type: !136, scopeLine: 3, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !135, retainedNodes: !5)
-!219 = !DILocalVariable(name: "this", arg: 1, scope: !218, type: !220, flags: DIFlagArtificial | DIFlagObjectPointer)
-!220 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !131, size: 64)
-!221 = !DILocation(line: 0, scope: !218)
-!222 = !DILocalVariable(name: "n", arg: 2, scope: !218, file: !1, line: 3, type: !134)
-!223 = !DILocation(line: 3, column: 16, scope: !218)
-!224 = !DILocation(line: 3, column: 21, scope: !218)
-!225 = !DILocation(line: 3, column: 27, scope: !218)
-!226 = !DILocation(line: 3, column: 31, scope: !218)
-!227 = distinct !DISubprogram(name: "await_ready", linkageName: "_ZNK8co_sleep11await_readyEv", scope: !131, file: !1, line: 4, type: !140, scopeLine: 4, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !139, retainedNodes: !5)
-!228 = !DILocalVariable(name: "this", arg: 1, scope: !227, type: !229, flags: DIFlagArtificial | DIFlagObjectPointer)
-!229 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !143, size: 64)
-!230 = !DILocation(line: 0, scope: !227)
-!231 = !DILocation(line: 4, column: 49, scope: !227)
-!232 = distinct !DISubprogram(linkageName: "_Z3foov.__await_suspend_wrapper__await", scope: !1, file: !1, type: !187, flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: !0, retainedNodes: !5)
-!233 = !DILocalVariable(arg: 1, scope: !232, type: !34, flags: DIFlagArtificial)
-!234 = !DILocation(line: 0, scope: !232)
-!235 = !DILocalVariable(arg: 2, scope: !232, type: !34, flags: DIFlagArtificial)
-!236 = !DILocation(line: 19, column: 12, scope: !232)
-!237 = distinct !DISubprogram(name: "await_suspend", linkageName: "_ZNK8co_sleep13await_suspendENSt7__n486116coroutine_handleIvEE", scope: !131, file: !1, line: 5, type: !145, scopeLine: 5, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !144, retainedNodes: !5)
-!238 = !DILocalVariable(name: "this", arg: 1, scope: !237, type: !229, flags: DIFlagArtificial | DIFlagObjectPointer)
-!239 = !DILocation(line: 0, scope: !237)
-!240 = !DILocalVariable(name: "h", arg: 2, scope: !237, file: !1, line: 5, type: !31)
-!241 = !DILocation(line: 5, column: 46, scope: !237)
-!242 = !DILocation(line: 5, column: 65, scope: !237)
-!243 = distinct !DISubprogram(name: "await_resume", linkageName: "_ZNK8co_sleep12await_resumeEv", scope: !131, file: !1, line: 6, type: !148, scopeLine: 6, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !147, retainedNodes: !5)
-!244 = !DILocalVariable(name: "this", arg: 1, scope: !243, type: !229, flags: DIFlagArtificial | DIFlagObjectPointer)
-!245 = !DILocation(line: 0, scope: !243)
-!246 = !DILocation(line: 6, column: 39, scope: !243)
-!247 = distinct !DISubprogram(name: "unhandled_exception", linkageName: "_ZN4Task12promise_type19unhandled_exceptionEv", scope: !3, file: !1, line: 15, type: !8, scopeLine: 15, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !87, retainedNodes: !5)
-!248 = !DILocalVariable(name: "this", arg: 1, scope: !247, type: !174, flags: DIFlagArtificial | DIFlagObjectPointer)
-!249 = !DILocation(line: 0, scope: !247)
-!250 = !DILocation(line: 15, column: 33, scope: !247)
-!251 = distinct !DISubprogram(name: "final_suspend", linkageName: "_ZN4Task12promise_type13final_suspendEv", scope: !3, file: !1, line: 14, type: !72, scopeLine: 14, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !71, retainedNodes: !5)
-!252 = !DILocalVariable(name: "this", arg: 1, scope: !251, type: !174, flags: DIFlagArtificial | DIFlagObjectPointer)
-!253 = !DILocation(line: 0, scope: !251)
-!254 = !DILocation(line: 14, column: 52, scope: !251)
-!255 = distinct !DISubprogram(name: "await_ready", linkageName: "_ZNKSt7__n486114suspend_always11await_readyEv", scope: !74, file: !18, line: 315, type: !77, scopeLine: 315, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !76, retainedNodes: !5)
-!256 = !DILocalVariable(name: "this", arg: 1, scope: !255, type: !257, flags: DIFlagArtificial | DIFlagObjectPointer)
-!257 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !80, size: 64)
-!258 = !DILocation(line: 0, scope: !255)
-!259 = !DILocation(line: 315, column: 51, scope: !255)
-!260 = distinct !DISubprogram(linkageName: "_Z3foov.__await_suspend_wrapper__final", scope: !1, file: !1, type: !187, flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: !0, retainedNodes: !5)
-!261 = !DILocalVariable(arg: 1, scope: !260, type: !34, flags: DIFlagArtificial)
-!262 = !DILocation(line: 0, scope: !260)
-!263 = !DILocalVariable(arg: 2, scope: !260, type: !34, flags: DIFlagArtificial)
-!264 = !DILocation(line: 18, column: 6, scope: !260)
-!265 = distinct !DISubprogram(name: "await_suspend", linkageName: "_ZNKSt7__n486114suspend_always13await_suspendENS_16coroutine_handleIvEE", scope: !74, file: !18, line: 317, type: !82, scopeLine: 317, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !81, retainedNodes: !5)
-!266 = !DILocalVariable(name: "this", arg: 1, scope: !265, type: !257, flags: DIFlagArtificial | DIFlagObjectPointer)
-!267 = !DILocation(line: 0, scope: !265)
-!268 = !DILocalVariable(arg: 2, scope: !265, file: !18, line: 317, type: !31)
-!269 = !DILocation(line: 317, column: 52, scope: !265)
-!270 = !DILocation(line: 317, column: 70, scope: !265)
-!271 = distinct !DISubprogram(name: "await_resume", linkageName: "_ZNKSt7__n486114suspend_always12await_resumeEv", scope: !74, file: !18, line: 319, type: !85, scopeLine: 319, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !84, retainedNodes: !5)
-!272 = !DILocalVariable(name: "this", arg: 1, scope: !271, type: !257, flags: DIFlagArtificial | DIFlagObjectPointer)
-!273 = !DILocation(line: 0, scope: !271)
-!274 = !DILocation(line: 319, column: 51, scope: !271)
-!275 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 22, type: !276, scopeLine: 22, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0)
-!276 = !DISubroutineType(types: !277)
-!277 = !{!134}
-!278 = !DILocation(line: 23, column: 3, scope: !275)
-!279 = !DILocation(line: 24, column: 1, scope: !275)
-!280 = distinct !DISubprogram(name: "coroutine_handle", linkageName: "_ZNSt7__n486116coroutine_handleIN4Task12promise_typeEEC2Ev", scope: !88, file: !18, line: 186, type: !92, scopeLine: 186, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !91, retainedNodes: !5)
-!281 = !DILocalVariable(name: "this", arg: 1, scope: !280, type: !282, flags: DIFlagArtificial | DIFlagObjectPointer)
-!282 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !88, size: 64)
-!283 = !DILocation(line: 0, scope: !280)
-!284 = !DILocation(line: 244, column: 13, scope: !280)
-!285 = !DILocation(line: 186, column: 47, scope: !280)
-!286 = distinct !DISubprogram(name: "from_address", linkageName: "_ZNSt7__n486116coroutine_handleIvE12from_addressEPv", scope: !31, file: !18, line: 107, type: !55, scopeLine: 108, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !54, retainedNodes: !5)
-!287 = !DILocalVariable(name: "__a", arg: 1, scope: !286, file: !18, line: 107, type: !34)
-!288 = !DILocation(line: 107, column: 60, scope: !286)
-!289 = !DILocalVariable(name: "__self", scope: !286, file: !18, line: 109, type: !31)
-!290 = !DILocation(line: 109, column: 19, scope: !286)
-!291 = !DILocation(line: 110, column: 21, scope: !286)
-!292 = !DILocation(line: 110, column: 9, scope: !286)
-!293 = !DILocation(line: 110, column: 19, scope: !286)
-!294 = !DILocation(line: 111, column: 2, scope: !286)
-!295 = distinct !DISubprogram(name: "address", linkageName: "_ZNKSt7__n486116coroutine_handleIN4Task12promise_typeEE7addressEv", scope: !88, file: !18, line: 207, type: !107, scopeLine: 207, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !106, retainedNodes: !5)
-!296 = !DILocalVariable(name: "this", arg: 1, scope: !295, type: !209, flags: DIFlagArtificial | DIFlagObjectPointer)
-!297 = !DILocation(line: 0, scope: !295)
-!298 = !DILocation(line: 207, column: 57, scope: !295)
-!299 = !DILocation(line: 207, column: 50, scope: !295)
-!300 = distinct !DISubprogram(name: "coroutine_handle", linkageName: "_ZNSt7__n486116coroutine_handleIvEC2Ev", scope: !31, file: !18, line: 91, type: !36, scopeLine: 91, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !35, retainedNodes: !5)
-!301 = !DILocalVariable(name: "this", arg: 1, scope: !300, type: !302, flags: DIFlagArtificial | DIFlagObjectPointer)
-!302 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !31, size: 64)
-!303 = !DILocation(line: 0, scope: !300)
-!304 = !DILocation(line: 91, column: 47, scope: !300)
-!305 = !DILocation(line: 91, column: 61, scope: !300)
+!6 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "coroutine_handle<void>", scope: !8, file: !7, line: 87, size: 64, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !10, templateParams: !13, identifier: "_ZTSNSt7__n486116coroutine_handleIvEE")
+!7 = !DIFile(filename: "/usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/coroutine", directory: "")
+!8 = !DINamespace(name: "__n4861", scope: !9, exportSymbols: true)
+!9 = !DINamespace(name: "std", scope: null)
+!10 = !{!11}
+!11 = !DIDerivedType(tag: DW_TAG_member, name: "_M_fr_ptr", scope: !6, file: !7, line: 131, baseType: !12, size: 64, flags: DIFlagProtected)
+!12 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 64)
+!13 = !{!14}
+!14 = !DITemplateTypeParameter(name: "_Promise", type: null, defaulted: true)
+!15 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "coroutine_handle<Task::promise_type>", scope: !8, file: !7, line: 182, size: 64, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !16, templateParams: !18, identifier: "_ZTSNSt7__n486116coroutine_handleIN4Task12promise_typeEEE")
+!16 = !{!17}
+!17 = !DIDerivedType(tag: DW_TAG_member, name: "_M_fr_ptr", scope: !15, file: !7, line: 244, baseType: !12, size: 64, flags: DIFlagPrivate)
+!18 = !{!19}
+!19 = !DITemplateTypeParameter(name: "_Promise", type: !3)
+!20 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "co_sleep", file: !1, line: 2, size: 32, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !21, identifier: "_ZTS8co_sleep")
+!21 = !{!22}
+!22 = !DIDerivedType(tag: DW_TAG_member, name: "delay", scope: !20, file: !1, line: 7, baseType: !23, size: 32)
+!23 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
+!24 = !{i32 7, !"Dwarf Version", i32 5}
+!25 = !{i32 2, !"Debug Info Version", i32 3}
+!26 = !{i32 1, !"wchar_size", i32 4}
+!27 = !{i32 7, !"uwtable", i32 2}
+!28 = !{i32 7, !"frame-pointer", i32 2}
+!29 = !{!"clang version 22.0.0git (https://github.com/llvm/llvm-project.git fe218aab737d55dfd67f4f84118744003f45958e)"}
+!30 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !1, file: !1, line: 18, type: !31, scopeLine: 18, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !5)
+!31 = !DISubroutineType(types: !32)
+!32 = !{!4}
+!33 = !DILocation(line: 18, column: 21, scope: !30)
+!34 = !DILocation(line: 18, column: 6, scope: !30)
+!35 = !DILocalVariable(name: "__promise", scope: !30, type: !36, flags: DIFlagArtificial)
+!36 = !DIDerivedType(tag: DW_TAG_typedef, name: "promise_type", scope: !37, file: !7, line: 75, baseType: !3)
+!37 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "__coroutine_traits_impl<Task, void>", scope: !8, file: !7, line: 72, size: 8, flags: DIFlagTypePassByValue, elements: !5, templateParams: !38, identifier: "_ZTSNSt7__n486123__coroutine_traits_implI4TaskvEE")
+!38 = !{!39, !40}
+!39 = !DITemplateTypeParameter(name: "_Result", type: !4)
+!40 = !DITemplateTypeParameter(type: null, defaulted: true)
+!41 = !DILocation(line: 0, scope: !30)
+!42 = !DILocation(line: 19, column: 12, scope: !43)
+!43 = distinct !DILexicalBlock(scope: !30, file: !1, line: 18, column: 21)
+!44 = !DILocation(line: 19, column: 3, scope: !43)
+!45 = distinct !DISubprogram(linkageName: "_Z3foov.__await_suspend_wrapper__init", scope: !1, file: !1, type: !46, flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: !0, retainedNodes: !5)
+!46 = !DISubroutineType(types: !5)
+!47 = !DILocation(line: 18, column: 6, scope: !45)
+!48 = distinct !DISubprogram(linkageName: "_Z3foov.__await_suspend_wrapper__await", scope: !1, file: !1, type: !46, flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: !0, retainedNodes: !5)
+!49 = !DILocation(line: 19, column: 12, scope: !48)
+!50 = distinct !DISubprogram(linkageName: "_Z3foov.__await_suspend_wrapper__final", scope: !1, file: !1, type: !46, flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: !0, retainedNodes: !5)
+!51 = !DILocation(line: 18, column: 6, scope: !50)
+!52 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 22, type: !53, scopeLine: 22, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0)
+!53 = !DISubroutineType(types: !54)
+!54 = !{!23}
+!55 = !DILocation(line: 23, column: 3, scope: !52)
+!56 = !DILocation(line: 24, column: 1, scope: !52)
>From 5fef98b2d8d77057a516d0ac8addf37bc9b5b793 Mon Sep 17 00:00:00 2001
From: h2h <h2h at meta.com>
Date: Thu, 8 Jan 2026 12:19:57 -0800
Subject: [PATCH 7/7] Update test checks
---
.../pseudo-probe-coro-debug-fix.ll | 20 ++++++++++++++++++-
1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/llvm/test/Transforms/SampleProfile/pseudo-probe-coro-debug-fix.ll b/llvm/test/Transforms/SampleProfile/pseudo-probe-coro-debug-fix.ll
index 172c09044e966..a0281cfb98962 100644
--- a/llvm/test/Transforms/SampleProfile/pseudo-probe-coro-debug-fix.ll
+++ b/llvm/test/Transforms/SampleProfile/pseudo-probe-coro-debug-fix.ll
@@ -1,7 +1,11 @@
; RUN: opt < %s -passes='pseudo-probe,cgscc(coro-split),coro-cleanup,always-inline' -mtriple=x86_64 -pass-remarks=inline -S -o %t.ll
; RUN: llc -mtriple=x86_64 -stop-after=pseudo-probe-inserter < %t.ll --filetype=asm -o - | FileCheck -check-prefix=MIR %s
+
+; Making sure PseudoProbeInserter is not generating GUID for `_Z3foov.resume`
; MIR-NOT: PSEUDO_PROBE 4448042984153125393,
+; Checking the same for `_Z3foov.cleanup`
; MIR-NOT: PSEUDO_PROBE 3532999944647676065,
+; Checking the same for `_Z3foov.destroy`
; MIR-NOT: PSEUDO_PROBE -7235034626494519075,
; RUN: llc -mtriple=x86_64 < %t.ll --filetype=obj -o %t.obj
@@ -11,7 +15,21 @@
; OBJ-NEXT: Flags: [ SHF_LINK_ORDER ]{{$}}
; OBJ-NEXT: Link: .text{{$}}
; OBJ-NEXT: AddressAlign: 0x1{{$}}
-; OBJ-NEXT: Content: 7B340AC7FC888D7F{{[0-9A-F]+$}}
+
+; Making sure `_Z3foov.resume` is not a top-level function except when its a sentinel probe (i.e. 20{GUID})
+; OBJ-NOT: Content: 11921D00879FBA3D{{[0-9A-F]+$}}
+; OBJ-NOT: {{([013-9A-F][0-9A-F])|(2[1-9A-F])}}11921D00879FBA3D{{[0-9A-F]+$}}
+; Checking the same for `_Z3foov.cleanup`
+; OBJ-NOT: Content: A1103324BBBC0731{{[0-9A-F]+$}}
+; OBJ-NOT: {{([013-9A-F][0-9A-F])|(2[1-9A-F])}}A1103324BBBC0731{{[0-9A-F]+$}}
+; Checking the same for `_Z3foov.destroy`
+; OBJ-NOT: Content: DDA8240E57FE979B{{[0-9A-F]+$}}
+; OBJ-NOT: {{([013-9A-F][0-9A-F])|(2[1-9A-F])}}DDA8240E57FE979B{{[0-9A-F]+$}}
+
+; OBJ: - Name: .pseudo_probe{{$}}
+; OBJ-NEXT: Type: SHT_PROGBITS{{$}}
+; OBJ-NEXT: Flags: [ SHF_LINK_ORDER, SHF_GROUP ]{{$}}
+; OBJ-NEXT: Link: .text.__clang_call_terminate{{$}}
; Reduced from original source code:
More information about the llvm-commits
mailing list