1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mtriple=arm64ec-pc-windows-msvc %s -o - | FileCheck %s
define dso_local i32 @test() #0 personality ptr @__C_specific_handler {
; CHECK-LABEL: "#test"
; CHECK: .Lfunc_begin0:
; CHECK-NEXT: .seh_proc "#test"
; CHECK-NEXT: .seh_handler "#__C_specific_handler", @unwind, @except
; CHECK-NEXT: // %bb.0:
; CHECK-NEXT: sub sp, sp, #48
; CHECK-NEXT: .seh_stackalloc 48
; CHECK-NEXT: stp x29, x30, [sp, #16] // 16-byte Folded Spill
; CHECK-NEXT: .seh_save_fplr 16
; CHECK-NEXT: add x29, sp, #16
; CHECK-NEXT: .seh_add_fp 16
; CHECK-NEXT: .seh_endprologue
; CHECK-NEXT: mov x0, #-2 // =0xfffffffffffffffe
; CHECK-NEXT: mov w8, #-1 // =0xffffffff
; CHECK-NEXT: stur x0, [x29, #16]
; CHECK-NEXT: stur w8, [x29, #-4]
; CHECK-NEXT: .Ltmp0:
; CHECK-NEXT: bl "#ext"
; CHECK-NEXT: .Ltmp1:
; CHECK-NEXT: .LBB0_1:
; CHECK-NEXT: stur w0, [x29, #-4]
; CHECK-NEXT: .seh_startepilogue
; CHECK-NEXT: ldp x29, x30, [sp, #16] // 16-byte Folded Reload
; CHECK-NEXT: .seh_save_fplr 16
; CHECK-NEXT: add sp, sp, #48
; CHECK-NEXT: .seh_stackalloc 48
; CHECK-NEXT: .seh_endepilogue
; CHECK-NEXT: ret
; CHECK-NEXT: .LBB0_2:
; CHECK-NEXT: $ehgcr_0_2:
; CHECK-NEXT: mov w0, wzr
; CHECK-NEXT: b .LBB0_1
%1 = alloca i32, align 4
%2 = alloca i32, align 4
store i32 -1, ptr %1, align 4
%3 = invoke i32 @ext() #3
to label %12 unwind label %4
4: ; preds = %0
%5 = catchswitch within none [label %6] unwind to caller
6: ; preds = %4
%7 = catchpad within %5 [ptr null]
catchret from %7 to label %8
8: ; preds = %6
store i32 0, ptr %1, align 4
br label %10
10: ; preds = %8, %12
%11 = load i32, ptr %1, align 4
ret i32 %11
12: ; preds = %0
store i32 %3, ptr %1, align 4
br label %10
}
declare dso_local i32 @ext() #1
declare dso_local i32 @__C_specific_handler(...)
|