xref: /llvm-project/llvm/test/CodeGen/X86/win64-jumptable.ll (revision 300c41c2bd5a5a5b5c98c603f64a36d2e4df967f)
1; RUN: llc < %s -relocation-model=static | FileCheck %s
2; RUN: llc < %s -relocation-model=pic | FileCheck %s --check-prefix=PIC
3; RUN: llc < %s -relocation-model=pic -code-model=large | FileCheck %s --check-prefix=PIC
4
5; FIXME: Remove '-relocation-model=static' when it is no longer necessary to
6; trigger the separate .rdata section.
7
8target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
9target triple = "x86_64-pc-windows-msvc19.0.24215"
10
11define void @f(i32 %x) {
12entry:
13  switch i32 %x, label %sw.epilog [
14    i32 0, label %sw.bb
15    i32 1, label %sw.bb1
16    i32 2, label %sw.bb2
17    i32 3, label %sw.bb3
18  ]
19
20sw.bb:                                            ; preds = %entry
21  tail call void @g(i32 0) #2
22  br label %sw.epilog
23
24sw.bb1:                                           ; preds = %entry
25  tail call void @g(i32 1) #2
26  br label %sw.epilog
27
28sw.bb2:                                           ; preds = %entry
29  tail call void @g(i32 2) #2
30  br label %sw.epilog
31
32sw.bb3:                                           ; preds = %entry
33  tail call void @g(i32 3) #2
34  br label %sw.epilog
35
36sw.epilog:                                        ; preds = %entry, %sw.bb3, %sw.bb2, %sw.bb1, %sw.bb
37  tail call void @g(i32 10) #2
38  ret void
39}
40
41declare void @g(i32)
42
43; CHECK: .text
44; CHECK: f:
45; CHECK: .seh_proc f
46; CHECK: jmpq    *.LJTI0_0
47; CHECK: .LBB0_{{.*}}: # %sw.bb
48; CHECK: .LBB0_{{.*}}: # %sw.bb2
49; CHECK: .LBB0_{{.*}}: # %sw.bb3
50; CHECK: .LBB0_{{.*}}: # %sw.bb1
51; CHECK: callq g
52; CHECK: jmp g # TAILCALL
53; CHECK: .section        .rdata,"dr"
54; CHECK: .quad .LBB0_
55; CHECK: .quad .LBB0_
56; CHECK: .quad .LBB0_
57; CHECK: .quad .LBB0_
58
59; It's important that we switch back to .text here, not .rdata.
60; CHECK: .text
61; CHECK: .seh_endproc
62
63; Windows PIC code should use 32-bit entries
64; PIC: .long .LBB0_2-.LJTI0_0
65; PIC: .long .LBB0_3-.LJTI0_0
66; PIC: .long .LBB0_4-.LJTI0_0
67; PIC: .long .LBB0_5-.LJTI0_0
68