[ARM] Fixup the creation of VPT blocks
[llvm-core.git] / test / CodeGen / AArch64 / jump-table-exynos.ll
blobe018410792e22837560f755b0508c66cadc55e6c
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-m1 -aarch64-enable-atomic-cfg-tidy=0 | FileCheck %s
3 ; RUN: llc -o - %s -mtriple=aarch64-none-linux-gnu -mcpu=exynos-m2 -aarch64-enable-atomic-cfg-tidy=0 | FileCheck %s
4 ; RUN: llc -o - %s -mtriple=aarch64-none-linux-gnu -mcpu=exynos-m3 -aarch64-enable-atomic-cfg-tidy=0 | FileCheck %s
6 ; Exynos doesn't want jump tables to be compressed for now.
8 define i32 @test_jumptable(i32 %in)  {
9   switch i32 %in, label %def [
10     i32 0, label %lbl1
11     i32 1, label %lbl2
12     i32 2, label %lbl3
13     i32 4, label %lbl4
14   ]
15 ; CHECK-LABEL: test_jumptable:
16 ; CHECK-NOT: ldrb
18 def:
19   ret i32 0
21 lbl1:
22   ret i32 1
24 lbl2:
25   ret i32 2
27 lbl3:
28   ret i32 4
30 lbl4:
31   ret i32 8
35 define i32 @test_jumptable_minsize(i32 %in) minsize {
36   switch i32 %in, label %def [
37     i32 0, label %lbl1
38     i32 1, label %lbl2
39     i32 2, label %lbl3
40     i32 4, label %lbl4
41   ]
42 ; CHECK-LABEL: test_jumptable_minsize:
43 ; CHECK:     adrp [[JTPAGE:x[0-9]+]], .LJTI1_0
44 ; CHECK:     add x[[JT:[0-9]+]], [[JTPAGE]], {{#?}}:lo12:.LJTI1_0
45 ; CHECK:     adr [[PCBASE:x[0-9]+]], [[JTBASE:.LBB[0-9]+_[0-9]+]]
46 ; CHECK:     ldrb w[[OFFSET:[0-9]+]], [x[[JT]], {{x[0-9]+}}]
47 ; CHECK:     add [[DEST:x[0-9]+]], [[PCBASE]], x[[OFFSET]], lsl #2
48 ; CHECK:     br [[DEST]]
52 def:
53   ret i32 0
55 lbl1:
56   ret i32 1
58 lbl2:
59   ret i32 2
61 lbl3:
62   ret i32 4
64 lbl4:
65   ret i32 8