llvm-project/llvm/test/CodeGen/AArch64/seh-localescape.ll

31 lines
873 B
LLVM

; RUN: llc -mtriple arm64-windows %s -o - | FileCheck %s
; Function Attrs: noinline nounwind optnone uwtable
define dso_local i32 @foo() {
entry:
; CHECK-LABEL: foo
; CHECK: .set .Lfoo$frame_escape_0, -4
%count = alloca i32, align 4
call void (...) @llvm.localescape(i32* %count)
ret i32 0
}
define internal i32 @"?filt$0@0@foo@@"(i8* %exception_pointers, i8* %frame_pointer) {
entry:
; CHECK-LABEL: @"?filt$0@0@foo@@"
; CHECK: movz x8, #:abs_g1_s:.Lfoo$frame_escape_0
; CHECK: movk x8, #:abs_g0_nc:.Lfoo$frame_escape_0
%0 = call i8* @llvm.localrecover(i8* bitcast (i32 ()* @foo to i8*), i8* %frame_pointer, i32 0)
%count = bitcast i8* %0 to i32*
%1 = load i32, i32* %count, align 4
ret i32 %1
}
; Function Attrs: nounwind readnone
declare i8* @llvm.localrecover(i8*, i8*, i32) #2
; Function Attrs: nounwind
declare void @llvm.localescape(...) #3