mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
0f20d48a09
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
51 lines
1.2 KiB
LLVM
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]*}}
|