llvm-project/llvm/test/CodeGen/AArch64/jump-table-compress.mir

112 lines
3.1 KiB
Plaintext
Raw Normal View History

# RUN: llc -mtriple=aarch64-linux-gnu %s -run-pass=aarch64-jump-tables -o - | FileCheck %s
--- |
define i32 @test_jumptable(i32 %in) {
unreachable
}
...
---
name: test_jumptable
alignment: 2
exposesReturnsTwice: false
legalized: false
regBankSelected: false
selected: false
tracksRegLiveness: true
liveins:
- { reg: '$w0' }
frameInfo:
isFrameAddressTaken: false
isReturnAddressTaken: false
hasStackMap: false
hasPatchPoint: false
stackSize: 0
offsetAdjustment: 0
maxAlignment: 0
adjustsStack: false
hasCalls: false
maxCallFrameSize: 0
hasOpaqueSPAdjustment: false
hasVAStart: false
hasMustTailInVarArgFunc: false
jumpTable:
kind: block-address
entries:
- id: 0
blocks: [ '%bb.2', '%bb.3' ]
- id: 1
blocks: [ '%bb.4', '%bb.5' ]
- id: 2
blocks: [ '%bb.7' ]
- id: 3
blocks: [ '%bb.9' ]
- id: 4
blocks: [ '%bb.9' ]
- id: 5
blocks: [ '%bb.11' ]
body: |
bb.0 (%ir-block.0):
bb.1 (%ir-block.0):
; CHECK-LABEL: body:
; CHECK-LABEL: bb.1
; CHECK: JumpTableDest8
liveins: $x8
early-clobber $x10, dead early-clobber $x11 = JumpTableDest32 undef killed $x9, undef killed $x8, %jump-table.0
BR killed $x10
bb.2:
; Last destination is 4 * 255 = 1020 bytes after first. Byte is OK.
dead $xzr = SPACE 1020, undef $xzr
bb.3:
; CHECK-LABEL: bb.3
; CHECK: JumpTableDest16
early-clobber $x10, dead early-clobber $x11 = JumpTableDest32 undef killed $x9, undef killed $x8, %jump-table.1
BR killed $x10
bb.4:
; Last destination is 4 * 256 = 1024 bytes after first. Half needed.
dead $xzr = SPACE 1024, undef $xzr
bb.5:
; CHECK-LABEL: bb.5
; CHECK: JumpTableDest8
early-clobber $x10, dead early-clobber $x11 = JumpTableDest32 undef killed $x9, undef killed $x8, %jump-table.2
BR killed $x10
bb.6:
; First destination is (2^20 - 4) after reference. Just reachable by ADR so can use compressed table.
dead $xzr = SPACE 1048556, undef $xzr
bb.7:
; CHECK-LABEL: bb.7
; CHECK: JumpTableDest32
early-clobber $x10, dead early-clobber $x11 = JumpTableDest32 undef killed $x9, undef killed $x8, %jump-table.3
BR killed $x10
bb.8:
; First destination is 2^20 after reference. Compressed table cannot reach it.
dead $xzr = SPACE 1048560, undef $xzr
bb.9:
; First destination is 2^20 before reference. Just within reach of ADR.
dead $xzr = SPACE 1048576, undef $xzr
bb.10:
; CHECK-LABEL: bb.10
; CHECK: JumpTableDest8
early-clobber $x10, dead early-clobber $x11 = JumpTableDest32 undef killed $x9, undef killed $x8, %jump-table.4
BR killed $x10
bb.11:
; First destination is 2^20 before reference. Just within reach of ADR.
dead $xzr = SPACE 1048580, undef $xzr
bb.12:
; CHECK-LABEL: bb.12
; CHECK: JumpTableDest32
early-clobber $x10, dead early-clobber $x11 = JumpTableDest32 undef killed $x9, undef killed $x8, %jump-table.5
BR killed $x10
...