================
@@ -0,0 +1,148 @@
+; Tests that we add DILabels for the suspend points.
+;
+; We check both the generated LLVM:
+; RUN: opt < %s -passes='cgscc(coro-split)' -S | FileCheck %s
+;
+; And the debug info:
+; RUN: opt < %s -passes='cgscc(coro-split),coro-cleanup' \
+; RUN:   | llc -O0 -filetype=obj -o - \
+; RUN:   | llvm-dwarfdump - \
+; RUN:   | FileCheck %s -check-prefix=DWARF
+
+source_filename = "coro.c"
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+declare void @bar(...) local_unnamed_addr #2
+declare void @baz(...) local_unnamed_addr #2
+
+; Roughly equivalent to:
+;
+; task f() {
+;   while (true) {
+;     bar();
+;     co_await std::suspend_always{};
+;     baz();
+;     co_await std::suspend_always{};
+;   }
+; }
+
+; Function Attrs: nounwind uwtable
+define ptr @f() #3 !dbg !16 {
+entry:
+  %0 = tail call token @llvm.coro.id(i32 0, ptr null, ptr @f, ptr null), !dbg 
!26
+  %1 = tail call i64 @llvm.coro.size.i64(), !dbg !26
+  %frame = tail call ptr @malloc(i64 %1), !dbg !26
+  %2 = tail call ptr @llvm.coro.begin(token %0, ptr %frame) #4, !dbg !26
+  br label %loop1, !dbg !27
+
+loop1:                                         ; preds = %for.cond, %entry
+  tail call void (...) @bar() #7, !dbg !33
+  %3 = tail call token @llvm.coro.save(ptr null), !dbg !34
+  %4 = tail call i8 @llvm.coro.suspend(token %3, i1 false), !dbg !34
+  switch i8 %4, label %coro_Suspend [
+    i8 0, label %loop2
+    i8 1, label %coro_Cleanup
+  ], !dbg !34
+
+loop2:                                         ; preds = %for.cond, %entry
+  tail call void (...) @baz() #7, !dbg !35
+  %5 = tail call token @llvm.coro.save(ptr null), !dbg !36
+  %6 = tail call i8 @llvm.coro.suspend(token %5, i1 false), !dbg !36
+  switch i8 %6, label %coro_Suspend [
+    i8 0, label %loop1
+    i8 1, label %coro_Cleanup
+  ], !dbg !36
+
+coro_Cleanup:                                     ; preds = %for.cond
+  %7 = tail call ptr @llvm.coro.free(token %0, ptr %2), !dbg !37
+  tail call void @free(ptr nonnull %7), !dbg !37
+  br label %coro_Suspend, !dbg !37
+
+coro_Suspend:                                     ; preds = %for.cond, 
%if.then, %coro_Cleanup
+  tail call i1 @llvm.coro.end(ptr null, i1 false, token none) #4, !dbg !40
+  ret ptr %2, !dbg !41
+}
+
+; Check that the resume function contains the `#dbg_label` instructions.
+; CHECK-LABEL:   define ptr @f() #1 !dbg !6 {
+; CHECK:         resume.0:        ; preds = %resume.entry
+; CHECK-NEXT:        #dbg_label(![[RESUME_0:[0-9]+]], !{{[0-9]+}})
+; CHECK:         resume.1:        ; preds = %resume.entry
+; CHECK-NEXT:        #dbg_label(![[RESUME_1:[0-9]+]], !{{[0-9]+}})
+
+; Check that the destroy function contains the `#dbg_label` instructions.
+; CHECK-LABEL:   define internal fastcc void @f.destroy({{.*}}) #1 !dbg !38 {
+; CHECK:         resume.0:        ; preds = %resume.entry
+; CHECK-NEXT:        #dbg_label(![[DESTROY_0:[0-9]+]], !{{[0-9]+}})
+; CHECK:         resume.1:        ; preds = %resume.entry
+; CHECK-NEXT:        #dbg_label(![[DESTROY_1:[0-9]+]], !{{[0-9]+}})
+
+; Check that the DILabels are correct.
+; CHECK: ![[RESUME_0]] = !DILabel(scope: !{{[0-9]+}}, name: "__coro_resume_0", 
file: !{{[0-9]*}}, line: 12, column: 6, isArtificial: true, coroSuspendIdx: 0)
+; CHECK: ![[RESUME_1]] = !DILabel(scope: !{{[0-9]+}}, name: "__coro_resume_1", 
file: !{{[0-9]*}}, line: 14, column: 6, isArtificial: true, coroSuspendIdx: 1)
+; CHECK: ![[DESTROY_0]] = !DILabel(scope: !{{[0-9]+}}, name: 
"__coro_resume_0", file: !{{[0-9]*}}, line: 12, column: 6, isArtificial: true, 
coroSuspendIdx: 0)
+; CHECK: ![[DESTROY_1]] = !DILabel(scope: !{{[0-9]+}}, name: 
"__coro_resume_1", file: !{{[0-9]*}}, line: 14, column: 6, isArtificial: true, 
coroSuspendIdx: 1)
+
+; DWARF:        {{.*}}DW_TAG_label
+; DWARF-LABEL:   DW_AT_name ("__coro_resume_0")
----------------
pogo59 wrote:

```suggestion
; DWARF-NEXT:   DW_AT_name ("__coro_resume_0")
```
The `-LABEL` suffix is unfortunately confusing, but it's too widespread to be 
worth changing.

https://github.com/llvm/llvm-project/pull/141937
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to