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-jumptable.ll
Martin Storsjö 0f20d48a09 Reapply "[CodeGen] [WinException] Only produce handler data at the end of the function if needed"
This reapplies 36c64af9d7f97414d48681b74352c9684077259b in updated
form.

Emit the xdata for each function at .seh_endproc. This keeps the
exact same output header order for most code generated by the LLVM
CodeGen layer. (Sections still change order for code built from
assembly where functions lack an explicit .seh_handlerdata
directive, and functions with chained unwind info.)

The practical effect should be that assembly output lacks
superfluous ".seh_handlerdata; .text" pairs at the end of functions
that don't handle exceptions, which allows such functions to use
the AArch64 packed unwind format again.

Differential Revision: https://reviews.llvm.org/D87448
2020-11-23 23:17:03 +02:00

51 lines
1.2 KiB
LLVM

; RUN: llc -o - %s -mtriple=aarch64-windows -aarch64-enable-compress-jump-tables=0 | FileCheck %s
; RUN: llc -o - %s -mtriple=aarch64-windows -aarch64-enable-compress-jump-tables=0 -filetype=obj | llvm-readobj -unwind - | FileCheck %s -check-prefix=UNWIND
define void @f(i32 %x) {
entry:
switch i32 %x, label %sw.epilog [
i32 0, label %sw.bb
i32 1, label %sw.bb1
i32 2, label %sw.bb2
i32 3, label %sw.bb3
]
sw.bb:
tail call void @g(i32 0, i32 4)
br label %sw.epilog
sw.bb1:
tail call void @g(i32 1, i32 5)
br label %sw.epilog
sw.bb2:
tail call void @g(i32 2, i32 6)
br label %sw.epilog
sw.bb3:
tail call void @g(i32 3, i32 7)
br label %sw.epilog
sw.epilog:
tail call void @g(i32 10, i32 8)
ret void
}
declare void @g(i32, i32)
; CHECK: .text
; CHECK: f:
; CHECK: .seh_proc f
; CHECK: b g
; CHECK-NEXT: .seh_endfunclet
; CHECK-NEXT: .p2align 2
; CHECK-NEXT: .LJTI0_0:
; CHECK: .word .LBB0_2-.Ltmp0
; CHECK: .word .LBB0_3-.Ltmp0
; CHECK: .word .LBB0_4-.Ltmp0
; CHECK: .word .LBB0_5-.Ltmp0
; CHECK: .seh_endproc
; Check that we can emit an object file with correct unwind info.
; UNWIND: FunctionLength: {{[1-9][0-9]*}}