76 lines · plain
1; RUN: llc -o - %s -mtriple=aarch64-none-linux-gnu -mattr=+force-32bit-jump-tables -aarch64-min-jump-table-entries=4 -aarch64-enable-atomic-cfg-tidy=0 | FileCheck %s2; RUN: llc -o - %s -mtriple=aarch64-none-linux-gnu -mcpu=exynos-m3 -aarch64-min-jump-table-entries=4 -aarch64-enable-atomic-cfg-tidy=0 | FileCheck %s3 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 %lbl19 i32 1, label %lbl210 i32 2, label %lbl311 i32 4, label %lbl412 ]13; CHECK-LABEL: test_jumptable:14; CHECK: adrp [[JTPAGE:x[0-9]+]], .LJTI0_015; CHECK: add x[[JT:[0-9]+]], [[JTPAGE]], {{#?}}:lo12:.LJTI0_016; CHECK: [[PCREL_LBL:.Ltmp.*]]:17; CHECK-NEXT: adr [[PCBASE:x[0-9]+]], [[PCREL_LBL]]18; CHECK: ldrsw x[[OFFSET:[0-9]+]], [x[[JT]], {{x[0-9]+}}, lsl #2]19; CHECK: add [[DEST:x[0-9]+]], [[PCBASE]], x[[OFFSET]]20; CHECK: br [[DEST]]21 22 23; CHECK: .LJTI0_0:24; CHECK-NEXT: .word .LBB{{.*}}-[[PCREL_LBL]]25 26def:27 ret i32 028 29lbl1:30 ret i32 131 32lbl2:33 ret i32 234 35lbl3:36 ret i32 437 38lbl4:39 ret i32 840 41}42 43define i32 @test_jumptable_minsize(i32 %in) minsize {44 switch i32 %in, label %def [45 i32 0, label %lbl146 i32 1, label %lbl247 i32 2, label %lbl348 i32 4, label %lbl449 ]50; CHECK-LABEL: test_jumptable_minsize:51; CHECK: adrp [[JTPAGE:x[0-9]+]], .LJTI1_052; CHECK: add x[[JT:[0-9]+]], [[JTPAGE]], {{#?}}:lo12:.LJTI1_053; CHECK: adr [[PCBASE:x[0-9]+]], [[JTBASE:.LBB[0-9]+_[0-9]+]]54; CHECK: ldrb w[[OFFSET:[0-9]+]], [x[[JT]], {{x[0-9]+}}]55; CHECK: add [[DEST:x[0-9]+]], [[PCBASE]], x[[OFFSET]], lsl #256; CHECK: br [[DEST]]57 58 59 60def:61 ret i32 062 63lbl1:64 ret i32 165 66lbl2:67 ret i32 268 69lbl3:70 ret i32 471 72lbl4:73 ret i32 874 75}76