xref: /llvm-project/llvm/test/CodeGen/AArch64/jump-table-32.ll (revision bdc0afc87181d4f7ab8aad2da6fa70a1204f0a84)
1; RUN: llc -verify-machineinstrs -o - %s -aarch64-min-jump-table-entries=4 -mtriple=arm64_32-apple-ios7.0 -aarch64-enable-atomic-cfg-tidy=0 | FileCheck %s
2
3define i32 @test_jumptable(i32 %in) {
4; CHECK: test_jumptable
5
6  switch i32 %in, label %def [
7    i32 0, label %lbl1
8    i32 1, label %lbl2
9    i32 2, label %lbl3
10    i32 4, label %lbl4
11  ]
12
13; CHECK: mov     w[[INDEX:[0-9]+]], w0
14; CHECK: adrp    [[JTPAGE:x[0-9]+]], LJTI0_0@PAGE
15; CHECK: add     x[[JT:[0-9]+]], [[JTPAGE]], LJTI0_0@PAGEOFF
16; CHECK: adr     [[BASE_BLOCK:x[0-9]+]], LBB0_2
17; CHECK: ldrb    w[[OFFSET:[0-9]+]], [x[[JT]], x[[INDEX]]]
18; CHECK: add     [[DEST:x[0-9]+]], [[BASE_BLOCK]], x[[OFFSET]], lsl #2
19; CHECK: br      [[DEST]]
20
21def:
22  ret i32 0
23
24lbl1:
25  ret i32 1
26
27lbl2:
28  ret i32 2
29
30lbl3:
31  ret i32 4
32
33lbl4:
34  ret i32 8
35
36}
37
38; CHECK: LJTI0_0:
39; CHECK-NEXT: .byte
40; CHECK-NEXT: .byte
41; CHECK-NEXT: .byte
42; CHECK-NEXT: .byte
43; CHECK-NEXT: .byte
44