[ARM] Fixup the creation of VPT blocks
[llvm-core.git] / test / CodeGen / AArch64 / jump-table-compress.mir
blobb4217ea61681362eb96c54f638f0f7801e129fad
1 # RUN: llc -mtriple=aarch64-linux-gnu %s -run-pass=aarch64-jump-tables -o - | FileCheck %s
2 --- |
3   define i32 @test_jumptable(i32 %in) {
4     unreachable
5   }
7 ...
8 ---
9 name:            test_jumptable
10 alignment:       2
11 exposesReturnsTwice: false
12 legalized:       false
13 regBankSelected: false
14 selected:        false
15 tracksRegLiveness: true
16 liveins:
17   - { reg: '$w0' }
18 frameInfo:
19   isFrameAddressTaken: false
20   isReturnAddressTaken: false
21   hasStackMap:     false
22   hasPatchPoint:   false
23   stackSize:       0
24   offsetAdjustment: 0
25   maxAlignment:    0
26   adjustsStack:    false
27   hasCalls:        false
28   maxCallFrameSize: 0
29   hasOpaqueSPAdjustment: false
30   hasVAStart:      false
31   hasMustTailInVarArgFunc: false
32 jumpTable:
33   kind:            block-address
34   entries:
35     - id:              0
36       blocks:          [ '%bb.2', '%bb.3' ]
37     - id:              1
38       blocks:          [ '%bb.4', '%bb.5' ]
39     - id:              2
40       blocks:          [ '%bb.7' ]
41     - id:              3
42       blocks:          [ '%bb.9' ]
43     - id:              4
44       blocks:          [ '%bb.9' ]
45     - id:              5
46       blocks:          [ '%bb.11' ]
47 body:             |
48   bb.0 (%ir-block.0):
50   bb.1 (%ir-block.0):
51     ; CHECK-LABEL: body:
52     ; CHECK-LABEL: bb.1
53     ; CHECK: JumpTableDest8
54     liveins: $x8
55     early-clobber $x10, dead early-clobber $x11 = JumpTableDest32 undef killed $x9, undef killed $x8, %jump-table.0
56     BR killed $x10
58   bb.2:
59     ; Last destination is 4 * 255 = 1020 bytes after first. Byte is OK.
60     dead $xzr = SPACE 1020, undef $xzr
62   bb.3:
63     ; CHECK-LABEL: bb.3
64     ; CHECK: JumpTableDest16
65     early-clobber $x10, dead early-clobber $x11 = JumpTableDest32 undef killed $x9, undef killed $x8, %jump-table.1
66     BR killed $x10
68   bb.4:
69     ; Last destination is 4 * 256 = 1024 bytes after first. Half needed.
70     dead $xzr = SPACE 1024, undef $xzr
72   bb.5:
73     ; CHECK-LABEL: bb.5
74     ; CHECK: JumpTableDest8
75     early-clobber $x10, dead early-clobber $x11 = JumpTableDest32 undef killed $x9, undef killed $x8, %jump-table.2
76     BR killed $x10
78   bb.6:
79     ; First destination is (2^20 - 4) after reference. Just reachable by ADR so can use compressed table.
80     dead $xzr = SPACE 1048556, undef $xzr
82   bb.7:
83     ; CHECK-LABEL: bb.7
84     ; CHECK: JumpTableDest32
85     early-clobber $x10, dead early-clobber $x11 = JumpTableDest32 undef killed $x9, undef killed $x8, %jump-table.3
86     BR killed $x10
88   bb.8:
89     ; First destination is 2^20 after reference. Compressed table cannot reach it.
90     dead $xzr = SPACE 1048560, undef $xzr
92   bb.9:
93     ; First destination is 2^20 before reference. Just within reach of ADR.
94     dead $xzr = SPACE 1048576, undef $xzr
96   bb.10:
97     ; CHECK-LABEL: bb.10
98     ; CHECK: JumpTableDest8
99     early-clobber $x10, dead early-clobber $x11 = JumpTableDest32 undef killed $x9, undef killed $x8, %jump-table.4
100     BR killed $x10
102   bb.11:
103     ; First destination is 2^20 before reference. Just within reach of ADR.
104     dead $xzr = SPACE 1048580, undef $xzr
106   bb.12:
107     ; CHECK-LABEL: bb.12
108     ; CHECK: JumpTableDest32
109     early-clobber $x10, dead early-clobber $x11 = JumpTableDest32 undef killed $x9, undef killed $x8, %jump-table.5
110     BR killed $x10