Lines Matching refs:unwind
8 ;;; when inlined because the funclet doesn't unwind to caller.
14 to label %exit unwind label %cleanup
18 cleanupret from %pad unwind to caller
26 to label %exit unwind label %cleanup.inner
28 ; CHECK-NEXT: unwind label %[[cleanup_inner:.+]]
33 cleanupret from %pad.inner unwind label %cleanup.outer
39 ; CHECK-NEXT: cleanupret from %[[pad_inner]] unwind label %[[cleanup_outer:.+]]
44 cleanupret from %pad.outer unwind to caller
49 ; CHECK-NEXT: unwind label %cleanup
50 ; CHECK: cleanupret from %[[pad_outer]] unwind label %cleanup{{$}}
58 ;;; Test with an "unwind to caller" catchswitch in a parent funclet
59 ;;; that needs to remain "unwind to caller" because the parent
60 ;;; doesn't unwind to caller.
66 to label %exit unwind label %cleanup
70 cleanupret from %pad unwind to caller
78 to label %exit unwind label %cleanup1
80 ; CHECK-NEXT: unwind label %[[cleanup1:.+]]
85 to label %ret1 unwind label %catchswitch
89 ; CHECK-NEXT: unwind label %[[catchswitch:.+]]
92 %cs = catchswitch within %outer [label %catch] unwind to caller
94 ; The catchswitch here needs to remain "unwind to caller" since %outer
96 ; CHECK-NEXT: %[[cs:[^ ]+]] = catchswitch within %[[outer]] [label %[[catch:.+]]] unwind to caller
108 cleanupret from %outer unwind label %cleanup2
109 ; CHECK: cleanupret from %[[outer]] unwind label %[[cleanup2:.+]]
113 cleanupret from %later unwind to caller
117 ; CHECK-NEXT: cleanupret from %[[later]] unwind label %cleanup{{$}}
124 ;;; Test with a call in a cleanup that has no definitive unwind
131 to label %exit unwind label %cleanup
135 cleanupret from %pad unwind to caller
143 to label %exit unwind label %cleanup
145 ; CHECK-NEXT: unwind label %[[cleanup:.+]]
153 ; because it may well unwind to there.
156 ; CHECK-NEXT: unwind label %cleanup{{$}}
164 ;;; unwind destination, that must be rewritten to unwind to the
165 ;;; inlined invoke's unwind dest
171 to label %exit unwind label %cleanup
175 cleanupret from %pad unwind to caller
183 to label %exit unwind label %cleanup
185 ; CHECK-NEXT: unwind label %[[cleanup:.+]]
190 to label %unreachable unwind label %dispatch
194 ; CHECK-NEXT: unwind label %[[dispatch:.+]]
197 %cs = catchswitch within %clean [label %catch] unwind to caller
199 ; The catchswitch must be rewritten to unwind to %cleanup in the caller
200 ; because it may well unwind to there.
201 ; CHECK-NEXT: %[[cs:[^ ]+]] = catchswitch within %[[clean]] [label %[[catch:.+]]] unwind label %cle…
213 ;;; Test with multiple levels of nesting, and unwind dests
221 to label %exit unwind label %cleanup
225 cleanupret from %pad unwind to caller
233 to label %cont unwind label %noinfo.root
235 ; CHECK-NEXT: to label %[[cont:[^ ]+]] unwind label %[[noinfo_root:.+]]
241 to label %noinfo.root.cont unwind label %noinfo.left
243 ; Nothing under "noinfo.root" has a definitive unwind destination, so
244 ; we must assume all of it may actually unwind, and redirect unwinds
248 ; CHECK-NEXT: to label %[[next:[^ ]+]] unwind label %cleanup{{$}}
251 ; CHECK-NEXT: to label %[[noinfo_root_cont:[^ ]+]] unwind label %[[noinfo_left:.+]]
256 to label %unreachable unwind label %noinfo.left.child
260 ; CHECK-NEXT: unwind label %[[noinfo_left_child:.+]]
263 …ft.child.cs = catchswitch within %noinfo.left.pad [label %noinfo.left.child.catch] unwind to caller
265 …h within %[[noinfo_left_pad]] [label %[[noinfo_left_child_catch:[^ ]+]]] unwind label %cleanup{{$}}
274 ; CHECK-NEXT: unwind label %cleanup{{$}}
278 to label %unreachable unwind label %noinfo.right
281 ; CHECK-NEXT: unwind label %[[noinfo_right:.+]]
284 …%noinfo.right.cs = catchswitch within %noinfo.root.pad [label %noinfo.right.catch] unwind to caller
286 …switch within %[[noinfo_root_pad]] [label %[[noinfo_right_catch:[^ ]+]]] unwind label %cleanup{{$}}
291 to label %unreachable unwind label %noinfo.right.child
295 ; CHECK-NEXT: unwind label %[[noinfo_right_child:.+]]
304 ; CHECK-NEXT: unwind label %cleanup{{$}}
308 to label %exit unwind label %implicit.root
311 ; CHECK-NEXT: unwind label %[[implicit_root:.+]]
317 to label %implicit.root.cont unwind label %implicit.left
319 ; There's an unwind edge to %internal in implicit.right, and we need to propagate that
321 ; implicit.left.child.catch, leaving all calls and "unwind to caller" catchswitches
322 ; alone to so they don't conflict with the unwind edge in implicit.right
326 ; CHECK-NEXT: to label %[[implicit_root_cont:[^ ]+]] unwind label %[[implicit_left:.+]]
331 to label %unreachable unwind label %implicit.left.child
335 ; CHECK-NEXT: unwind label %[[implicit_left_child:.+]]
338 …hild.cs = catchswitch within %implicit.left.pad [label %implicit.left.child.catch] unwind to caller
340 …hswitch within %[[implicit_left_pad]] [label %[[implicit_left_child_catch:[^ ]+]]] unwind to caller
352 to label %unreachable unwind label %implicit.right
355 ; CHECK-NEXT: unwind label %[[implicit_right:.+]]
358 …%implicit.right.cs = catchswitch within %implicit.root.pad [label %implicit.right.catch] unwind la…
360 ; This is the unwind edge (to %internal) whose existence needs to get propagated around the "implic…
361 …ch within %[[implicit_root_pad]] [label %[[implicit_right_catch:[^ ]+]]] unwind label %[[internal:…
366 to label %unreachable unwind label %implicit.right.child
370 ; CHECK-NEXT: unwind label %[[implicit_right_child:.+]]
375 to label %unreachable unwind label %implicit.right.grandchild
379 ; CHECK-NEXT: unwind label %[[implicit_right_grandchild:.+]]
382 …chswitch within %implicit.right.child.pad [label %implicit.right.grandchild.catch] unwind to caller
384 …n %[[implicit_right_child_pad]] [label %[[implicit_right_grandchild_catch:[^ ]+]]] unwind to caller
397 cleanupret from %internal.pad unwind to caller
403 ; CHECK-NEXT: to label %[[next:[^ ]+]] unwind label %cleanup{{$}}
405 ; CHECK-NEXT: cleanupret from %[[internal_pad]] unwind label %cleanup{{$}}
414 ;;; descendants which unwind to other descendants (left.left unwinds to
423 to label %exit unwind label %cleanup
427 cleanupret from %pad unwind to caller
435 to label %exit unwind label %root
437 ; CHECK-NEXT: unwind label %[[root:.+]]
441 to label %root.cont unwind label %left
445 ; CHECK-NEXT: to label %[[root_cont:.+]] unwind label %[[left:.+]]
448 %left.cs = catchswitch within %root.pad [label %left.catch] unwind to caller
450 ; CHECK-NEXT: %[[left_cs:.+]] = catchswitch within %[[root_pad]] [label %[[left_catch:.+]]] unwind …
456 to label %unreach unwind label %left.left
460 ; CHECK-NEXT: to label %[[lc_cont:.+]] unwind label %cleanup
463 ; CHECK-NEXT: to label %[[unreach:.+]] unwind label %[[left_left:.+]]
467 cleanupret from %ll.pad unwind label %left.right
470 ; CHECK-NEXT: cleanupret from %[[ll_pad]] unwind label %[[left_right:.+]]
482 to label %unreach unwind label %right
485 ; CHECK-NEXT: to label %[[root_cont_cont:.+]] unwind label %cleanup
488 ; CHECK-NEXT: to label %[[unreach]] unwind label %[[right:.+]]
493 to label %unreach unwind label %right.child
497 ; CHECK-NEXT: to label %[[unreach]] unwind label %[[right_child:.+]]
502 to label %unreach unwind label %far_right
506 ; CHECK-NEXT: to label %[[unreach]] unwind label %[[far_right:.+]]
509 %fr.cs = catchswitch within %root.pad [label %fr.catch] unwind to caller
511 ; CHECK-NEXT: %[[fr_cs:.+]] = catchswitch within %[[root_pad]] [label %[[fr_catch:.+]]] unwind labe…
532 ;;; when propagating unwind destination info to "right".
538 to label %exit unwind label %cleanup
542 cleanupret from %pad unwind to caller
550 to label %exit unwind label %root
552 ; CHECK-NEXT: unwind label %[[root:.+]]
557 to label %root.cont unwind label %child
561 ; CHECK-NEXT: to label %[[root_cont:.+]] unwind label %[[child:.+]]
564 cleanupret from %root.cp unwind to caller
566 ; CHECK-NEXT: cleanupret from %[[root_cp]] unwind label %cleanup
571 to label %child.cont unwind label %left
575 ; CHECK-NEXT: to label %[[child_cont:.+]] unwind label %[[left:.+]]
580 to label %left.cont unwind label %left.left
584 ; CHECK-NEXT: to label %[[left_cont:.+]] unwind label %[[left_left:.+]]
588 cleanupret from %ll.cp unwind label %left.right
591 ; CHECK-NEXT: cleanupret from %[[ll_cp]] unwind label %[[left_right:.+]]
595 to label %unreach unwind label %left.right
598 ; CHECK-NEXT: to label %[[unreach:.+]] unwind label %[[left_right]]
609 to label %unreach unwind label %right
612 ; CHECK-NEXT: to label %[[unreach]] unwind label %[[right:.+]]
621 ; CHECK-NEXT: to label %[[right_cont:.+]] unwind label %cleanup
642 to label %exit unwind label %callsite_parent
647 to label %ret unwind label %cleanup
649 cleanupret from %callsite_parent.pad unwind label %cleanup
653 cleanupret from %pad unwind to caller
661 to label %exit unwind label %inlinee_cleanup
663 ; CHECK-NEXT: unwind label %[[inlinee_cleanup:.+]]
672 ; CHECK-NEXT: unwind label %cleanup{{$}}