@@ -56,12 +56,18 @@ sw.epilog: ; preds = %sw.bb
56
56
%4 = load i32 , i32* %x.addr , align 4 , !dbg !20
57
57
%add = add nsw i32 %4 , 1 , !dbg !21
58
58
store i32 %add , i32* %x.addr , align 4 , !dbg !22
59
- br label %coro_Cleanup , !dbg !23
59
+ %asm_res = callbr i32 asm "" , "=r,r,X" (i32 %x , i8* blockaddress (@f , %indirect.dest ))
60
+ to label %coro_Cleanup [label %indirect.dest ]
61
+
62
+ indirect.dest:
63
+ call void @log (), !dbg !18
64
+ br label %coro_Cleanup
60
65
61
66
coro_Cleanup: ; preds = %sw.epilog, %sw.bb1
62
67
%5 = load i8* , i8** %coro_hdl , align 8 , !dbg !24
63
68
%6 = call i8* @llvm.coro.free (token %0 , i8* %5 ), !dbg !24
64
69
call void @free (i8* %6 ), !dbg !24
70
+ call void @llvm.dbg.declare (metadata i32 %asm_res , metadata !32 , metadata !13 ), !dbg !16
65
71
br label %coro_Suspend , !dbg !24
66
72
67
73
coro_Suspend: ; preds = %coro_Cleanup, %sw.default
@@ -89,6 +95,7 @@ declare token @llvm.coro.id(i32, i8* readnone, i8* nocapture readonly, i8*) #2
89
95
declare i8* @malloc (i64 ) #3
90
96
declare i8* @allocate ()
91
97
declare void @print ({ i8* , i32 })
98
+ declare void @log ()
92
99
93
100
; Function Attrs: nounwind readnone
94
101
declare i64 @llvm.coro.size.i64 () #4
@@ -162,9 +169,10 @@ attributes #7 = { noduplicate }
162
169
!29 = !DILocalVariable (name: "partial_dead" , scope: !6 , file: !7 , line: 55 , type: !11 )
163
170
!30 = !DILocalVariable (name: "direct_value" , scope: !6 , file: !7 , line: 55 , type: !11 )
164
171
!31 = !DILocalVariable (name: "allocated" , scope: !6 , file: !7 , line: 55 , type: !11 )
172
+ !32 = !DILocalVariable (name: "inline_asm" , scope: !6 , file: !7 , line: 55 , type: !11 )
165
173
166
174
; CHECK: define i8* @f(i32 %x) #0 personality i32 0 !dbg ![[ORIG:[0-9]+]]
167
- ; CHECK: define internal fastcc void @f.resume(%f.Frame* noalias nonnull align 8 dereferenceable(32 ) %FramePtr) #0 personality i32 0 !dbg ![[RESUME:[0-9]+]]
175
+ ; CHECK: define internal fastcc void @f.resume(%f.Frame* noalias nonnull align 8 dereferenceable(40 ) %FramePtr) #0 personality i32 0 !dbg ![[RESUME:[0-9]+]]
168
176
; CHECK: entry.resume:
169
177
; CHECK: %[[DBG_PTR:.*]] = alloca %f.Frame*
170
178
; CHECK: call void @llvm.dbg.declare(metadata %f.Frame** %[[DBG_PTR]], metadata ![[RESUME_COROHDL:[0-9]+]], metadata !DIExpression(DW_OP_deref, DW_OP_plus_uconst,
@@ -182,8 +190,12 @@ attributes #7 = { noduplicate }
182
190
; CHECK-NEXT: to label %[[NORMAL_DEST:.+]] unwind
183
191
; CHECK: [[NORMAL_DEST]]
184
192
; CHEKC-NEXT: call void @llvm.dbg.declare(metadata i8* %[[ALLOCATED_STORAGE]]
185
- ; CHECK: define internal fastcc void @f.destroy(%f.Frame* noalias nonnull align 8 dereferenceable(32) %FramePtr) #0 personality i32 0 !dbg ![[DESTROY:[0-9]+]]
186
- ; CHECK: define internal fastcc void @f.cleanup(%f.Frame* noalias nonnull align 8 dereferenceable(32) %FramePtr) #0 personality i32 0 !dbg ![[CLEANUP:[0-9]+]]
193
+ ; CHECK: %[[CALLBR_RES:.+]] = callbr i32 asm
194
+ ; CHECK-NEXT: to label %[[DEFAULT_DEST:.+]] [label
195
+ ; CHECK: [[DEFAULT_DEST]]:
196
+ ; CHECK-NEXT: call void @llvm.dbg.declare(metadata i32 %[[CALLBR_RES]]
197
+ ; CHECK: define internal fastcc void @f.destroy(%f.Frame* noalias nonnull align 8 dereferenceable(40) %FramePtr) #0 personality i32 0 !dbg ![[DESTROY:[0-9]+]]
198
+ ; CHECK: define internal fastcc void @f.cleanup(%f.Frame* noalias nonnull align 8 dereferenceable(40) %FramePtr) #0 personality i32 0 !dbg ![[CLEANUP:[0-9]+]]
187
199
188
200
; CHECK: ![[ORIG]] = distinct !DISubprogram(name: "f", linkageName: "flink"
189
201
0 commit comments