llvm.org GIT mirror llvm / release_80 test / CodeGen / AArch64 / seh-localescape.ll
release_80

Tree @release_80 (Download .tar.gz)

seh-localescape.ll @release_80raw · history · blame

; 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