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