blob: e2b67c68e3b6ea27bef05e9ecc727d23b16fafa6 [file]
## Check parsing of a .llvm_jump_table_info section
## The assembly is produced from bolt/test/AArch64/Inputs/jump-table.c
# RUN: llvm-mc -filetype=obj -triple aarch64-unknown-unknown %s -o %t.o
# RUN: %clang %cflags %t.o -o %t.exe -Wl,-q -static
# RUN: llvm-bolt %t.exe -o %t.null -print-jump-tables | FileCheck %s
# Confirm 67 entries are parsed:
# CHECK: jump tables for function _Z7switchyi:
# CHECK-NEXT: Jump table {{.*}} for function _Z7switchyi
# CHECK: 0x0042 : .Ltmp16
.text
.globl _Z7switchyi // -- Begin function _Z7switchyi
.p2align 2
.type _Z7switchyi,@function
_Z7switchyi: // @_Z7switchyi
.cfi_startproc
// %bb.0: // %entry
adrp x8, g
cmp w0, #20
b.ne .LBB0_2
.LBB0_1: // %sw.bb26
// =>This Inner Loop Header: Depth=1
ldr w0, [x8, :lo12:g]
cmp w0, #20
b.eq .LBB0_1
.LBB0_2: // %tailrecurse
cmp w0, #66
b.hi .LBB0_18
// %bb.3: // %tailrecurse
mov w9, w0
adrp x10, .LJTI0_0
add x10, x10, :lo12:.LJTI0_0
adr x11, .LBB0_4
.Ltmp0:
ldrb w12, [x10, x9]
add x11, x11, x12, lsl #2
.Ltmp1:
br x11
.LBB0_4: // %sw.bb17
ldr w9, [x8, :lo12:g]
add w9, w9, #5
b .LBB0_13
.LBB0_5: // %sw.bb11
ldr w9, [x8, :lo12:g]
sub w9, w9, #3
b .LBB0_10
.LBB0_6: // %sw.bb5
ldr w9, [x8, :lo12:g]
add w9, w9, #1
b .LBB0_13
.LBB0_7: // %sw.bb3
ldr w9, [x8, :lo12:g]
add w9, w9, #17
str w9, [x8, :lo12:g]
ret
.LBB0_8: // %sw.bb23
ldr w9, [x8, :lo12:g]
add w9, w9, #99
b .LBB0_13
.LBB0_9: // %sw.bb8
ldr w9, [x8, :lo12:g]
sub w9, w9, #1
.LBB0_10: // %sw.epilog
str w9, [x8, :lo12:g]
.LBB0_11: // %sw.bb1
ldr w9, [x8, :lo12:g]
add w9, w9, #1
str w9, [x8, :lo12:g]
ret
.LBB0_12: // %sw.bb20
ldr w9, [x8, :lo12:g]
add w9, w9, #42
.LBB0_13: // %sw.epilog
str w9, [x8, :lo12:g]
.LBB0_14: // %sw.bb
ldr w9, [x8, :lo12:g]
sub w9, w9, #1
str w9, [x8, :lo12:g]
ret
.LBB0_15: // %sw.epilog.loopexit
mov w9, #42 // =0x2a
str w9, [x8, :lo12:g]
ret
.LBB0_16: // %sw.bb27
ldr w9, [x8, :lo12:g]
sub w9, w9, #1234
str w9, [x8, :lo12:g]
ret
.LBB0_17: // %sw.bb4
ldr w9, [x8, :lo12:g]
sub w9, w9, #66
str w9, [x8, :lo12:g]
ret
.LBB0_18: // %sw.epilog.loopexit29
str wzr, [x8, :lo12:g]
ret
.Lfunc_end0:
.size _Z7switchyi, .Lfunc_end0-_Z7switchyi
.cfi_endproc
.section .rodata,"a",@progbits
.LJTI0_0:
.byte (.LBB0_14-.LBB0_4)>>2
.byte (.LBB0_11-.LBB0_4)>>2
.byte (.LBB0_15-.LBB0_4)>>2
.byte (.LBB0_7-.LBB0_4)>>2
.byte (.LBB0_17-.LBB0_4)>>2
.byte (.LBB0_6-.LBB0_4)>>2
.byte (.LBB0_9-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_4-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_4-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_12-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_8-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_16-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_18-.LBB0_4)>>2
.byte (.LBB0_5-.LBB0_4)>>2
.section .llvm_jump_table_info,"",@0x6fff4c0e
.byte 2 // format 2: 1b relative; shr 2
.xword .LJTI0_0
.xword .LBB0_4 // Base
.xword .Ltmp0 // Load Instruction
.xword .Ltmp1 // Branch Instruction
.byte 67 // Number of Entries
// -- End function
.type g,@object // @g
.bss
.globl g
.p2align 2, 0x0
g:
.word 0 // 0x0
.size g, 4
.section ".note.GNU-stack","",@progbits