101 lines · plain
1; RUN: llc -verify-machineinstrs -mtriple=aarch64-pc-windows-msvc < %s \2; RUN: | FileCheck --check-prefix=CHECK %s3 4; Loosely based on IR for this C++ source code:5; void f(int p);6; void try_in_catch() {7; try {8; f(1);9; } catch (...) {10; try {11; f(2);12; } catch (...) {13; f(3);14; }15; }16; }17 18declare void @f(i32 %p)19declare i32 @__CxxFrameHandler3(...)20 21define i32 @try_in_catch() personality ptr @__CxxFrameHandler3 {22entry:23 invoke void @f(i32 1)24 to label %try.cont unwind label %catch.dispatch.125try.cont:26 ret i32 027 28catch.dispatch.1:29 %cs1 = catchswitch within none [label %handler1] unwind to caller30handler1:31 %h1 = catchpad within %cs1 [ptr null, i32 64, ptr null]32 invoke void @f(i32 2) [ "funclet"(token %h1) ]33 to label %catchret1 unwind label %catch.dispatch.234catchret1:35 catchret from %h1 to label %try.cont36 37catch.dispatch.2:38 %cs2 = catchswitch within %h1 [label %handler2] unwind to caller39handler2:40 %h2 = catchpad within %cs2 [ptr null, i32 64, ptr null]41 call void @f(i32 3)42 catchret from %h2 to label %catchret143}44 45; CHECK-LABEL: $cppxdata$try_in_catch:46; CHECK-NEXT: .word 42906550647; CHECK-NEXT: .word 448; CHECK-NEXT: .word $stateUnwindMap$try_in_catch49; CHECK-NEXT: .word 250; CHECK-NEXT: .word $tryMap$try_in_catch51; ip2state num + ptr52; CHECK-NEXT: .word 753; CHECK-NEXT: .word $ip2state$try_in_catch54; unwindhelp offset55; CHECK-NEXT: .word -1656; CHECK-NEXT: .word 057; EHFlags58; CHECK-NEXT: .word 159 60; CHECK-LABEL: $tryMap$try_in_catch:61; CHECK-NEXT: .word 062; CHECK-NEXT: .word 063; CHECK-NEXT: .word 364; CHECK-NEXT: .word 165; CHECK-NEXT: .word $handlerMap$0$try_in_catch66; CHECK-NEXT: .word 267; CHECK-NEXT: .word 268; CHECK-NEXT: .word 369; CHECK-NEXT: .word 170; CHECK-NEXT: .word $handlerMap$1$try_in_catch71 72; CHECK: $handlerMap$0$try_in_catch:73; CHECK-NEXT: .word 6474; CHECK-NEXT: .word 075; CHECK-NEXT: .word 076; CHECK-NEXT: .word "?catch${{[0-9]+}}@?0?try_in_catch@4HA"77; CHECK-NEXT: .word 078 79; CHECK: $handlerMap$1$try_in_catch:80; CHECK-NEXT: .word 6481; CHECK-NEXT: .word 082; CHECK-NEXT: .word 083; CHECK-NEXT: .word "?catch${{[0-9]+}}@?0?try_in_catch@4HA"84; CHECK-NEXT: .word 085 86; CHECK: $ip2state$try_in_catch:87; CHECK-NEXT: .word .Lfunc_begin0@IMGREL88; CHECK-NEXT: .word -189; CHECK-NEXT: .word .Ltmp0@IMGREL90; CHECK-NEXT: .word 091; CHECK-NEXT: .word .Ltmp1@IMGREL92; CHECK-NEXT: .word -193; CHECK-NEXT: .word "?catch$2@?0?try_in_catch@4HA"@IMGREL94; CHECK-NEXT: .word 195; CHECK-NEXT: .word .Ltmp2@IMGREL96; CHECK-NEXT: .word 297; CHECK-NEXT: .word .Ltmp3@IMGREL98; CHECK-NEXT: .word 199; CHECK-NEXT: .word "?catch$4@?0?try_in_catch@4HA"@IMGREL100; CHECK-NEXT: .word 3101