1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-25 20:23:11 +01:00
llvm-mirror/test/CodeGen/AArch64/win64-no-uwtable.ll
Sanne Wouda 8cf92aa718 [AArch64] Fix save register pairing for Windows AAPCS
Summary:
On Windows, when a function does not have an unwind table (for example, EH
filtering funclets), we don't correctly pair FP and LR to form the frame record
in all circumstances.

Fix this by invalidating a pair when the second register is FP when compiling
for Windows, even when CFI is not needed.

Fixes PR44271 introduced by D65653.

Reviewers: efriedma, sdesmalen, rovka, rengolin, t.p.northover, thegameg, greened

Reviewed By: rengolin

Subscribers: kristof.beyls, hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D71754
2020-01-14 15:08:27 +00:00

36 lines
892 B
LLVM

; RUN: llc -mtriple=arm64-windows -o - %s | FileCheck %s
declare void @f()
declare void @g()
; Function Attrs: nounwind
define dso_local void @SEHfilter() nounwind "frame-pointer"="all" {
; CHECK-LABEL: @SEHfilter
; CHECK: %bb.0:
; CHECK-NEXT: stp x30, x29, [sp, #-32]!
; CHECK-NEXT: str x19, [sp, #16]
; CHECK-NEXT: ldr w19, [x8]
; CHECK-NEXT: mov x29, sp
; CHECK-NEXT: bl g
; CHECK-NEXT: cbz w19, .LBB0_2
; CHECK-NEXT: ; %bb.1:
; CHECK-NEXT: ldr x19, [sp, #16]
; CHECK-NEXT: ldp x30, x29, [sp], #32
; CHECK-NEXT: ret
; CHECK-NEXT: .LBB0_2: ; %if.end.i
; CHECK-NEXT: bl f
; CHECK-NEXT: brk #0x1
%1 = load i32, i32* undef, align 4
tail call void @g()
%tobool.i = icmp eq i32 %1, 0
br i1 %tobool.i, label %if.end.i, label %exit
if.end.i:
call void @f()
unreachable
exit:
ret void
}