1*9880d681SAndroid Build Coastguard Worker; RUN: llc -stack-symbol-ordering=0 -verify-machineinstrs -mtriple=i686-pc-windows-msvc < %s | FileCheck --check-prefix=X86 %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -stack-symbol-ordering=0 -verify-machineinstrs -mtriple=x86_64-pc-windows-msvc < %s | FileCheck --check-prefix=X64 %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; Loosely based on IR for this C++ source code: 5*9880d681SAndroid Build Coastguard Worker; void f(int p); 6*9880d681SAndroid Build Coastguard Worker; int main() { 7*9880d681SAndroid Build Coastguard Worker; try { 8*9880d681SAndroid Build Coastguard Worker; f(1); 9*9880d681SAndroid Build Coastguard Worker; } catch (int e) { 10*9880d681SAndroid Build Coastguard Worker; f(e); 11*9880d681SAndroid Build Coastguard Worker; } catch (...) { 12*9880d681SAndroid Build Coastguard Worker; f(3); 13*9880d681SAndroid Build Coastguard Worker; } 14*9880d681SAndroid Build Coastguard Worker; } 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker%rtti.TypeDescriptor2 = type { i8**, i8*, [3 x i8] } 17*9880d681SAndroid Build Coastguard Worker%eh.CatchableType = type { i32, i8*, i32, i32, i32, i32, i8* } 18*9880d681SAndroid Build Coastguard Worker%eh.CatchableTypeArray.1 = type { i32, [1 x %eh.CatchableType*] } 19*9880d681SAndroid Build Coastguard Worker%eh.ThrowInfo = type { i32, i8*, i8*, i8* } 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker$"\01??_R0H@8" = comdat any 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker@"\01??_7type_info@@6B@" = external constant i8* 24*9880d681SAndroid Build Coastguard Worker@"\01??_R0H@8" = linkonce_odr global %rtti.TypeDescriptor2 { i8** @"\01??_7type_info@@6B@", i8* null, [3 x i8] c".H\00" }, comdat 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Workerdeclare void @f(i32 %p, i32* %l) 28*9880d681SAndroid Build Coastguard Workerdeclare i1 @getbool() 29*9880d681SAndroid Build Coastguard Workerdeclare i32 @__CxxFrameHandler3(...) 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Workerdefine i32 @try_catch_catch() personality i32 (...)* @__CxxFrameHandler3 { 32*9880d681SAndroid Build Coastguard Workerentry: 33*9880d681SAndroid Build Coastguard Worker %e.addr = alloca i32 34*9880d681SAndroid Build Coastguard Worker %local = alloca i32 35*9880d681SAndroid Build Coastguard Worker invoke void @f(i32 1, i32* %local) 36*9880d681SAndroid Build Coastguard Worker to label %try.cont unwind label %catch.dispatch 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Workercatch.dispatch: ; preds = %entry 39*9880d681SAndroid Build Coastguard Worker %cs = catchswitch within none [label %handler1, label %handler2] unwind to caller 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Workerhandler1: 42*9880d681SAndroid Build Coastguard Worker %h1 = catchpad within %cs [%rtti.TypeDescriptor2* @"\01??_R0H@8", i32 0, i32* %e.addr] 43*9880d681SAndroid Build Coastguard Worker %e = load i32, i32* %e.addr 44*9880d681SAndroid Build Coastguard Worker call void @f(i32 %e, i32* %local) [ "funclet"(token %h1) ] 45*9880d681SAndroid Build Coastguard Worker catchret from %h1 to label %try.cont 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Workerhandler2: 48*9880d681SAndroid Build Coastguard Worker %h2 = catchpad within %cs [i8* null, i32 64, i8* null] 49*9880d681SAndroid Build Coastguard Worker call void @f(i32 3, i32* %local) [ "funclet"(token %h2) ] 50*9880d681SAndroid Build Coastguard Worker catchret from %h2 to label %try.cont 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Workertry.cont: 53*9880d681SAndroid Build Coastguard Worker ret i32 0 54*9880d681SAndroid Build Coastguard Worker} 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Worker; X86-LABEL: _try_catch_catch: 57*9880d681SAndroid Build Coastguard Worker; X86: movl %esp, -[[sp_offset:[0-9]+]](%ebp) 58*9880d681SAndroid Build Coastguard Worker; X86: movl $0, -{{[0-9]+}}(%ebp) 59*9880d681SAndroid Build Coastguard Worker; X86: leal -[[local_offs:[0-9]+]](%ebp), %[[addr_reg:[a-z]+]] 60*9880d681SAndroid Build Coastguard Worker; X86-DAG: pushl %[[addr_reg]] 61*9880d681SAndroid Build Coastguard Worker; X86-DAG: pushl $1 62*9880d681SAndroid Build Coastguard Worker; X86: calll _f 63*9880d681SAndroid Build Coastguard Worker; X86: [[contbb:LBB0_[0-9]+]]: # %try.cont 64*9880d681SAndroid Build Coastguard Worker; X86: retl 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Worker; FIXME: These should be de-duplicated. 67*9880d681SAndroid Build Coastguard Worker; X86: [[restorebb2:LBB0_[0-9]+]]: # Block address taken 68*9880d681SAndroid Build Coastguard Worker; X86-NEXT: # %handler2 69*9880d681SAndroid Build Coastguard Worker; X86-NEXT: addl $12, %ebp 70*9880d681SAndroid Build Coastguard Worker; X86: jmp [[contbb]] 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Worker; X86: [[restorebb1:LBB0_[0-9]+]]: # Block address taken 73*9880d681SAndroid Build Coastguard Worker; X86-NEXT: # %handler1 74*9880d681SAndroid Build Coastguard Worker; X86-NEXT: addl $12, %ebp 75*9880d681SAndroid Build Coastguard Worker; X86: jmp [[contbb]] 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Worker; X86: "?catch$[[catch1bb:[0-9]+]]@?0?try_catch_catch@4HA": 78*9880d681SAndroid Build Coastguard Worker; X86: LBB0_[[catch1bb]]: # %handler1{{$}} 79*9880d681SAndroid Build Coastguard Worker; X86: pushl %ebp 80*9880d681SAndroid Build Coastguard Worker; X86: subl $8, %esp 81*9880d681SAndroid Build Coastguard Worker; X86: addl $12, %ebp 82*9880d681SAndroid Build Coastguard Worker; X86: movl %esp, -[[sp_offset]](%ebp) 83*9880d681SAndroid Build Coastguard Worker; X86-DAG: movl -32(%ebp), %[[e_reg:[a-z]+]] 84*9880d681SAndroid Build Coastguard Worker; X86-DAG: leal -[[local_offs]](%ebp), %[[addr_reg:[a-z]+]] 85*9880d681SAndroid Build Coastguard Worker; X86-DAG: movl $1, -{{[0-9]+}}(%ebp) 86*9880d681SAndroid Build Coastguard Worker; X86: pushl %[[addr_reg]] 87*9880d681SAndroid Build Coastguard Worker; X86: pushl %[[e_reg]] 88*9880d681SAndroid Build Coastguard Worker; X86: calll _f 89*9880d681SAndroid Build Coastguard Worker; X86: addl $8, %esp 90*9880d681SAndroid Build Coastguard Worker; X86: movl $[[restorebb1]], %eax 91*9880d681SAndroid Build Coastguard Worker; X86: addl $8, %esp 92*9880d681SAndroid Build Coastguard Worker; X86: popl %ebp 93*9880d681SAndroid Build Coastguard Worker; X86: retl 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Worker; X86: "?catch$[[catch2bb:[0-9]+]]@?0?try_catch_catch@4HA": 96*9880d681SAndroid Build Coastguard Worker; X86: LBB0_[[catch2bb]]: # %handler2{{$}} 97*9880d681SAndroid Build Coastguard Worker; X86: pushl %ebp 98*9880d681SAndroid Build Coastguard Worker; X86: subl $8, %esp 99*9880d681SAndroid Build Coastguard Worker; X86: addl $12, %ebp 100*9880d681SAndroid Build Coastguard Worker; X86: movl %esp, -[[sp_offset]](%ebp) 101*9880d681SAndroid Build Coastguard Worker; X86-DAG: leal -[[local_offs]](%ebp), %[[addr_reg:[a-z]+]] 102*9880d681SAndroid Build Coastguard Worker; X86-DAG: movl $1, -{{[0-9]+}}(%ebp) 103*9880d681SAndroid Build Coastguard Worker; X86: pushl %[[addr_reg]] 104*9880d681SAndroid Build Coastguard Worker; X86: pushl $3 105*9880d681SAndroid Build Coastguard Worker; X86: calll _f 106*9880d681SAndroid Build Coastguard Worker; X86: addl $8, %esp 107*9880d681SAndroid Build Coastguard Worker; X86: movl $[[restorebb2]], %eax 108*9880d681SAndroid Build Coastguard Worker; X86: addl $8, %esp 109*9880d681SAndroid Build Coastguard Worker; X86: popl %ebp 110*9880d681SAndroid Build Coastguard Worker; X86: retl 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Worker; X86: L__ehtable$try_catch_catch: 113*9880d681SAndroid Build Coastguard Worker; X86: $handlerMap$0$try_catch_catch: 114*9880d681SAndroid Build Coastguard Worker; X86-NEXT: .long 0 115*9880d681SAndroid Build Coastguard Worker; X86-NEXT: .long "??_R0H@8" 116*9880d681SAndroid Build Coastguard Worker; X86-NEXT: .long -20 117*9880d681SAndroid Build Coastguard Worker; X86-NEXT: .long "?catch$[[catch1bb]]@?0?try_catch_catch@4HA" 118*9880d681SAndroid Build Coastguard Worker; X86-NEXT: .long 64 119*9880d681SAndroid Build Coastguard Worker; X86-NEXT: .long 0 120*9880d681SAndroid Build Coastguard Worker; X86-NEXT: .long 0 121*9880d681SAndroid Build Coastguard Worker; X86-NEXT: .long "?catch$[[catch2bb]]@?0?try_catch_catch@4HA" 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Worker; X64-LABEL: try_catch_catch: 124*9880d681SAndroid Build Coastguard Worker; X64: Lfunc_begin0: 125*9880d681SAndroid Build Coastguard Worker; X64: pushq %rbp 126*9880d681SAndroid Build Coastguard Worker; X64: .seh_pushreg 5 127*9880d681SAndroid Build Coastguard Worker; X64: subq $[[STCK_ALLOC:.*]], %rsp 128*9880d681SAndroid Build Coastguard Worker; X64: .seh_stackalloc [[STCK_ALLOC]] 129*9880d681SAndroid Build Coastguard Worker; X64: leaq [[STCK_ALLOC]](%rsp), %rbp 130*9880d681SAndroid Build Coastguard Worker; X64: .seh_setframe 5, [[STCK_ALLOC]] 131*9880d681SAndroid Build Coastguard Worker; X64: .seh_endprologue 132*9880d681SAndroid Build Coastguard Worker; X64: movq $-2, -16(%rbp) 133*9880d681SAndroid Build Coastguard Worker; X64: .Ltmp0 134*9880d681SAndroid Build Coastguard Worker; X64-DAG: leaq -[[local_offs:[0-9]+]](%rbp), %rdx 135*9880d681SAndroid Build Coastguard Worker; X64-DAG: movl $1, %ecx 136*9880d681SAndroid Build Coastguard Worker; X64: callq f 137*9880d681SAndroid Build Coastguard Worker; X64: [[contbb:\.LBB0_[0-9]+]]: # Block address taken 138*9880d681SAndroid Build Coastguard Worker; X64-NEXT: # %try.cont 139*9880d681SAndroid Build Coastguard Worker; X64: addq $[[STCK_ALLOC]], %rsp 140*9880d681SAndroid Build Coastguard Worker; X64: popq %rbp 141*9880d681SAndroid Build Coastguard Worker; X64: retq 142*9880d681SAndroid Build Coastguard Worker 143*9880d681SAndroid Build Coastguard Worker; X64: "?catch$[[catch1bb:[0-9]+]]@?0?try_catch_catch@4HA": 144*9880d681SAndroid Build Coastguard Worker; X64: LBB0_[[catch1bb]]: # %handler1{{$}} 145*9880d681SAndroid Build Coastguard Worker; X64: movq %rdx, 16(%rsp) 146*9880d681SAndroid Build Coastguard Worker; X64: pushq %rbp 147*9880d681SAndroid Build Coastguard Worker; X64: .seh_pushreg 5 148*9880d681SAndroid Build Coastguard Worker; X64: subq $32, %rsp 149*9880d681SAndroid Build Coastguard Worker; X64: .seh_stackalloc 32 150*9880d681SAndroid Build Coastguard Worker; X64: leaq [[STCK_ALLOC]](%rdx), %rbp 151*9880d681SAndroid Build Coastguard Worker; X64: .seh_endprologue 152*9880d681SAndroid Build Coastguard Worker; X64-DAG: leaq -[[local_offs]](%rbp), %rdx 153*9880d681SAndroid Build Coastguard Worker; X64-DAG: movl -4(%rbp), %ecx 154*9880d681SAndroid Build Coastguard Worker; X64: callq f 155*9880d681SAndroid Build Coastguard Worker; X64: leaq [[contbb]](%rip), %rax 156*9880d681SAndroid Build Coastguard Worker; X64-NEXT: addq $32, %rsp 157*9880d681SAndroid Build Coastguard Worker; X64-NEXT: popq %rbp 158*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 159*9880d681SAndroid Build Coastguard Worker 160*9880d681SAndroid Build Coastguard Worker; X64: "?catch$[[catch2bb:[0-9]+]]@?0?try_catch_catch@4HA": 161*9880d681SAndroid Build Coastguard Worker; X64: LBB0_[[catch2bb]]: # %handler2{{$}} 162*9880d681SAndroid Build Coastguard Worker; X64: movq %rdx, 16(%rsp) 163*9880d681SAndroid Build Coastguard Worker; X64: pushq %rbp 164*9880d681SAndroid Build Coastguard Worker; X64: .seh_pushreg 5 165*9880d681SAndroid Build Coastguard Worker; X64: subq $32, %rsp 166*9880d681SAndroid Build Coastguard Worker; X64: .seh_stackalloc 32 167*9880d681SAndroid Build Coastguard Worker; X64: leaq [[STCK_ALLOC]](%rdx), %rbp 168*9880d681SAndroid Build Coastguard Worker; X64: .seh_endprologue 169*9880d681SAndroid Build Coastguard Worker; X64-DAG: leaq -[[local_offs]](%rbp), %rdx 170*9880d681SAndroid Build Coastguard Worker; X64-DAG: movl $3, %ecx 171*9880d681SAndroid Build Coastguard Worker; X64: callq f 172*9880d681SAndroid Build Coastguard Worker; X64: leaq [[contbb]](%rip), %rax 173*9880d681SAndroid Build Coastguard Worker; X64-NEXT: addq $32, %rsp 174*9880d681SAndroid Build Coastguard Worker; X64-NEXT: popq %rbp 175*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 176*9880d681SAndroid Build Coastguard Worker 177*9880d681SAndroid Build Coastguard Worker; X64: $cppxdata$try_catch_catch: 178*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 429065506 179*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 2 180*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long ($stateUnwindMap$try_catch_catch)@IMGREL 181*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 1 182*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long ($tryMap$try_catch_catch)@IMGREL 183*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 5 184*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long ($ip2state$try_catch_catch)@IMGREL 185*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 48 186*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 0 187*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 1 188*9880d681SAndroid Build Coastguard Worker 189*9880d681SAndroid Build Coastguard Worker; X64: $tryMap$try_catch_catch: 190*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 0 191*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 0 192*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 1 193*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 2 194*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long ($handlerMap$0$try_catch_catch)@IMGREL 195*9880d681SAndroid Build Coastguard Worker 196*9880d681SAndroid Build Coastguard Worker; X64: $handlerMap$0$try_catch_catch: 197*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 0 198*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long "??_R0H@8"@IMGREL 199*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 60 200*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long "?catch$[[catch1bb]]@?0?try_catch_catch@4HA"@IMGREL 201*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 56 202*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 64 203*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 0 204*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 0 205*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long "?catch$[[catch2bb]]@?0?try_catch_catch@4HA"@IMGREL 206*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 56 207*9880d681SAndroid Build Coastguard Worker 208*9880d681SAndroid Build Coastguard Worker; X64: $ip2state$try_catch_catch: 209*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long .Lfunc_begin0@IMGREL 210*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long -1 211*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long .Ltmp0@IMGREL+1 212*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 0 213*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long .Ltmp1@IMGREL+1 214*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long -1 215*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long "?catch$[[catch1bb]]@?0?try_catch_catch@4HA"@IMGREL 216*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 1 217*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long "?catch$[[catch2bb]]@?0?try_catch_catch@4HA"@IMGREL 218*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 1 219*9880d681SAndroid Build Coastguard Worker 220*9880d681SAndroid Build Coastguard Worker 221*9880d681SAndroid Build Coastguard Workerdefine i32 @branch_to_normal_dest() personality i32 (...)* @__CxxFrameHandler3 { 222*9880d681SAndroid Build Coastguard Workerentry: 223*9880d681SAndroid Build Coastguard Worker invoke void @f(i32 1, i32* null) 224*9880d681SAndroid Build Coastguard Worker to label %try.cont unwind label %catch.dispatch 225*9880d681SAndroid Build Coastguard Worker 226*9880d681SAndroid Build Coastguard Workercatch.dispatch: 227*9880d681SAndroid Build Coastguard Worker %cs1 = catchswitch within none [label %catch] unwind to caller 228*9880d681SAndroid Build Coastguard Worker 229*9880d681SAndroid Build Coastguard Workercatch: 230*9880d681SAndroid Build Coastguard Worker %cp1 = catchpad within %cs1 [i8* null, i32 64, i8* null] 231*9880d681SAndroid Build Coastguard Worker br label %loop 232*9880d681SAndroid Build Coastguard Worker 233*9880d681SAndroid Build Coastguard Workerloop: 234*9880d681SAndroid Build Coastguard Worker %V = call i1 @getbool() [ "funclet"(token %cp1) ] 235*9880d681SAndroid Build Coastguard Worker br i1 %V, label %loop, label %catch.done 236*9880d681SAndroid Build Coastguard Worker 237*9880d681SAndroid Build Coastguard Workercatch.done: 238*9880d681SAndroid Build Coastguard Worker catchret from %cp1 to label %try.cont 239*9880d681SAndroid Build Coastguard Worker 240*9880d681SAndroid Build Coastguard Workertry.cont: 241*9880d681SAndroid Build Coastguard Worker ret i32 0 242*9880d681SAndroid Build Coastguard Worker} 243*9880d681SAndroid Build Coastguard Worker 244*9880d681SAndroid Build Coastguard Worker; X86-LABEL: _branch_to_normal_dest: 245*9880d681SAndroid Build Coastguard Worker; X86: calll _f 246*9880d681SAndroid Build Coastguard Worker 247*9880d681SAndroid Build Coastguard Worker; X86: [[contbb:LBB1_[0-9]+]]: # %try.cont 248*9880d681SAndroid Build Coastguard Worker; X86: retl 249*9880d681SAndroid Build Coastguard Worker 250*9880d681SAndroid Build Coastguard Worker; X86: [[restorebb:LBB1_[0-9]+]]: # Block address taken 251*9880d681SAndroid Build Coastguard Worker; X86-NEXT: # %catch.done 252*9880d681SAndroid Build Coastguard Worker; X86-NEXT: addl $12, %ebp 253*9880d681SAndroid Build Coastguard Worker; X86: jmp [[contbb]] 254*9880d681SAndroid Build Coastguard Worker 255*9880d681SAndroid Build Coastguard Worker; X86: "?catch$[[catchbb:[0-9]+]]@?0?branch_to_normal_dest@4HA": 256*9880d681SAndroid Build Coastguard Worker; X86: LBB1_[[catchbb]]: # %catch{{$}} 257*9880d681SAndroid Build Coastguard Worker; X86: pushl %ebp 258*9880d681SAndroid Build Coastguard Worker; X86: subl $8, %esp 259*9880d681SAndroid Build Coastguard Worker; X86: addl $12, %ebp 260*9880d681SAndroid Build Coastguard Worker; X86: movl $1, -16(%ebp) 261*9880d681SAndroid Build Coastguard Worker; X86: LBB1_[[loopbb:[0-9]+]]: # %loop 262*9880d681SAndroid Build Coastguard Worker; X86: calll _getbool 263*9880d681SAndroid Build Coastguard Worker; X86: testb $1, %al 264*9880d681SAndroid Build Coastguard Worker; X86: jne LBB1_[[loopbb]] 265*9880d681SAndroid Build Coastguard Worker; X86: # %catch.done 266*9880d681SAndroid Build Coastguard Worker; X86-NEXT: movl $[[restorebb]], %eax 267*9880d681SAndroid Build Coastguard Worker; X86-NEXT: addl $8, %esp 268*9880d681SAndroid Build Coastguard Worker; X86-NEXT: popl %ebp 269*9880d681SAndroid Build Coastguard Worker; X86-NEXT: retl 270*9880d681SAndroid Build Coastguard Worker 271*9880d681SAndroid Build Coastguard Worker; X86: L__ehtable$branch_to_normal_dest: 272*9880d681SAndroid Build Coastguard Worker; X86: $handlerMap$0$branch_to_normal_dest: 273*9880d681SAndroid Build Coastguard Worker; X86-NEXT: .long 64 274*9880d681SAndroid Build Coastguard Worker; X86-NEXT: .long 0 275*9880d681SAndroid Build Coastguard Worker; X86-NEXT: .long 0 276*9880d681SAndroid Build Coastguard Worker; X86-NEXT: .long "?catch$[[catchbb]]@?0?branch_to_normal_dest@4HA" 277*9880d681SAndroid Build Coastguard Worker 278*9880d681SAndroid Build Coastguard Worker; X64-LABEL: branch_to_normal_dest: 279*9880d681SAndroid Build Coastguard Worker; X64: # %entry 280*9880d681SAndroid Build Coastguard Worker; X64: pushq %rbp 281*9880d681SAndroid Build Coastguard Worker; X64: .seh_pushreg 5 282*9880d681SAndroid Build Coastguard Worker; X64: subq $48, %rsp 283*9880d681SAndroid Build Coastguard Worker; X64: .seh_stackalloc 48 284*9880d681SAndroid Build Coastguard Worker; X64: leaq 48(%rsp), %rbp 285*9880d681SAndroid Build Coastguard Worker; X64: .seh_setframe 5, 48 286*9880d681SAndroid Build Coastguard Worker; X64: .seh_endprologue 287*9880d681SAndroid Build Coastguard Worker; X64: .Ltmp[[before_call:[0-9]+]]: 288*9880d681SAndroid Build Coastguard Worker; X64: callq f 289*9880d681SAndroid Build Coastguard Worker; X64: .Ltmp[[after_call:[0-9]+]]: 290*9880d681SAndroid Build Coastguard Worker; X64: [[contbb:\.LBB1_[0-9]+]]: # Block address taken 291*9880d681SAndroid Build Coastguard Worker; X64-NEXT: # %try.cont 292*9880d681SAndroid Build Coastguard Worker; X64: addq $48, %rsp 293*9880d681SAndroid Build Coastguard Worker; X64: popq %rbp 294*9880d681SAndroid Build Coastguard Worker; X64: retq 295*9880d681SAndroid Build Coastguard Worker 296*9880d681SAndroid Build Coastguard Worker; X64: "?catch$[[catchbb:[0-9]+]]@?0?branch_to_normal_dest@4HA": 297*9880d681SAndroid Build Coastguard Worker; X64: LBB1_[[catchbb]]: # %catch{{$}} 298*9880d681SAndroid Build Coastguard Worker; X64: movq %rdx, 16(%rsp) 299*9880d681SAndroid Build Coastguard Worker; X64: pushq %rbp 300*9880d681SAndroid Build Coastguard Worker; X64: .seh_pushreg 5 301*9880d681SAndroid Build Coastguard Worker; X64: subq $32, %rsp 302*9880d681SAndroid Build Coastguard Worker; X64: .seh_stackalloc 32 303*9880d681SAndroid Build Coastguard Worker; X64: leaq 48(%rdx), %rbp 304*9880d681SAndroid Build Coastguard Worker; X64: .seh_endprologue 305*9880d681SAndroid Build Coastguard Worker; X64: .LBB1_[[normal_dest_bb:[0-9]+]]: # %loop 306*9880d681SAndroid Build Coastguard Worker; X64: callq getbool 307*9880d681SAndroid Build Coastguard Worker; X64: testb $1, %al 308*9880d681SAndroid Build Coastguard Worker; X64: jne .LBB1_[[normal_dest_bb]] 309*9880d681SAndroid Build Coastguard Worker; X64: # %catch.done 310*9880d681SAndroid Build Coastguard Worker; X64: leaq [[contbb]](%rip), %rax 311*9880d681SAndroid Build Coastguard Worker; X64-NEXT: addq $32, %rsp 312*9880d681SAndroid Build Coastguard Worker; X64-NEXT: popq %rbp 313*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 314*9880d681SAndroid Build Coastguard Worker 315*9880d681SAndroid Build Coastguard Worker; X64-LABEL: $cppxdata$branch_to_normal_dest: 316*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 429065506 317*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 2 318*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long ($stateUnwindMap$branch_to_normal_dest)@IMGREL 319*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 1 320*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long ($tryMap$branch_to_normal_dest)@IMGREL 321*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 4 322*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long ($ip2state$branch_to_normal_dest)@IMGREL 323*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 40 324*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 0 325*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 1 326*9880d681SAndroid Build Coastguard Worker 327*9880d681SAndroid Build Coastguard Worker; X64-LABEL: $stateUnwindMap$branch_to_normal_dest: 328*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long -1 329*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 0 330*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long -1 331*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 0 332*9880d681SAndroid Build Coastguard Worker 333*9880d681SAndroid Build Coastguard Worker; X64-LABEL: $tryMap$branch_to_normal_dest: 334*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 0 335*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 0 336*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 1 337*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 1 338*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long ($handlerMap$0$branch_to_normal_dest)@IMGREL 339*9880d681SAndroid Build Coastguard Worker 340*9880d681SAndroid Build Coastguard Worker; X64-LABEL: $handlerMap$0$branch_to_normal_dest: 341*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 64 342*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 0 343*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 0 344*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long "?catch$[[catchbb]]@?0?branch_to_normal_dest@4HA"@IMGREL 345*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 56 346*9880d681SAndroid Build Coastguard Worker 347*9880d681SAndroid Build Coastguard Worker; X64-LABEL: $ip2state$branch_to_normal_dest: 348*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long .Lfunc_begin1@IMGREL 349*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long -1 350*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long .Ltmp[[before_call]]@IMGREL+1 351*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 0 352*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long .Ltmp[[after_call]]@IMGREL+1 353*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long -1 354*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long "?catch$[[catchbb]]@?0?branch_to_normal_dest@4HA"@IMGREL 355*9880d681SAndroid Build Coastguard Worker; X64-NEXT: .long 1 356