forked from OSchip/llvm-project
112 lines
3.1 KiB
Plaintext
112 lines
3.1 KiB
Plaintext
|
# 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
|
||
|
...
|