1; RUN: llc -o - %s -mtriple=aarch64-none-linux-gnu -mattr=+force-32bit-jump-tables -aarch64-enable-atomic-cfg-tidy=0 | FileCheck %s
2; RUN: llc -o - %s -mtriple=aarch64-none-linux-gnu -mcpu=exynos-m3 -aarch64-enable-atomic-cfg-tidy=0 | FileCheck %s
3
4; Exynos doesn't want jump tables to be compressed for now.
5
6define i32 @test_jumptable(i32 %in)  {
7  switch i32 %in, label %def [
8    i32 0, label %lbl1
9    i32 1, label %lbl2
10    i32 2, label %lbl3
11    i32 4, label %lbl4
12  ]
13; CHECK-LABEL: test_jumptable:
14; CHECK-NOT: ldrb
15
16def:
17  ret i32 0
18
19lbl1:
20  ret i32 1
21
22lbl2:
23  ret i32 2
24
25lbl3:
26  ret i32 4
27
28lbl4:
29  ret i32 8
30
31}
32
33define i32 @test_jumptable_minsize(i32 %in) minsize {
34  switch i32 %in, label %def [
35    i32 0, label %lbl1
36    i32 1, label %lbl2
37    i32 2, label %lbl3
38    i32 4, label %lbl4
39  ]
40; CHECK-LABEL: test_jumptable_minsize:
41; CHECK:     adrp [[JTPAGE:x[0-9]+]], .LJTI1_0
42; CHECK:     add x[[JT:[0-9]+]], [[JTPAGE]], {{#?}}:lo12:.LJTI1_0
43; CHECK:     adr [[PCBASE:x[0-9]+]], [[JTBASE:.LBB[0-9]+_[0-9]+]]
44; CHECK:     ldrb w[[OFFSET:[0-9]+]], [x[[JT]], {{x[0-9]+}}]
45; CHECK:     add [[DEST:x[0-9]+]], [[PCBASE]], x[[OFFSET]], lsl #2
46; CHECK:     br [[DEST]]
47
48
49
50def:
51  ret i32 0
52
53lbl1:
54  ret i32 1
55
56lbl2:
57  ret i32 2
58
59lbl3:
60  ret i32 4
61
62lbl4:
63  ret i32 8
64
65}
66