Files
clang-p2996/llvm/test/CodeGen/AArch64/win64-jumptable.ll
Martin Storsjö 4e5488afb2 [AArch64] [COFF] Move jump tables back to the readonly section
This essentially reverts f5884d255e
(D57277).

That commit was made as a workaround since LLVM back then didn't
support cross-section relative relocations (IMAGE_REL_ARM64_REL32)
in COFF for ARM64. Support for this was implemented later,
in d5c5cf5ce8 (D99572) and
382c505d9c (D102217).

The commit that moved jump tables to the function section noted
that it woud be ideal to utilize IMAGE_REL_ARM64_REL32.

Differential Revision: https://reviews.llvm.org/D113576
2021-11-23 10:13:48 +02:00

53 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: .section .rdata,"dr"
; 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: .text
; CHECK: .seh_endproc
; Check that we can emit an object file with correct unwind info.
; UNWIND: FunctionLength: {{[1-9][0-9]*}}