[CodeGen] Mark setjmp/catchret MBBs address-taken
[oota-llvm.git] / test / CodeGen / X86 / win-catchpad-nested.ll
1 ; RUN: llc -mtriple=x86_64-pc-windows-coreclr < %s | FileCheck %s
2
3 declare void @ProcessCLRException()
4
5 declare void @f()
6
7 define void @test1() personality void ()* @ProcessCLRException {
8 entry:
9   invoke void @f()
10           to label %exit unwind label %outer.pad
11 outer.pad:
12   %outer = catchpad [i32 1]
13           to label %outer.catch unwind label %outer.end
14 outer.catch:
15   invoke void @f()
16           to label %outer.ret unwind label %inner.pad
17 inner.pad:
18   %inner = catchpad [i32 2]
19           to label %inner.ret unwind label %inner.end
20 inner.ret:
21   catchret %inner to label %outer.ret
22 inner.end:
23   catchendpad unwind label %outer.end
24 outer.ret:
25   catchret %outer to label %exit
26 outer.end:
27   catchendpad unwind to caller
28 exit:
29   ret void
30 }
31
32 ; Check the catchret targets
33 ; CHECK-LABEL: test1: # @test1
34 ; CHECK: [[Exit:^[^: ]+]]: # Block address taken
35 ; CHECK-NEXT:              # %exit
36 ; CHECK: [[OuterRet:^[^: ]+]]: # Block address taken
37 ; CHECK-NEXT:                  # %outer.ret
38 ; CHECK-NEXT: leaq [[Exit]](%rip), %rax
39 ; CHECK:      retq   # CATCHRET
40 ; CHECK: {{^[^: ]+}}: # %inner.pad
41 ; CHECK: .seh_endprolog
42 ; CHECK-NEXT: leaq [[OuterRet]](%rip), %rax
43 ; CHECK:      retq   # CATCHRET