Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sve-ld1r.mir
bloba51dd0814db376be84a936d9b6139721ea0ab3d6
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve -run-pass=prologepilog -simplify-mir -verify-machineinstrs %s -o - | FileCheck %s
4 # Test that prologepilog works for each of the LD1R instructions for stack-based objects.
6 --- |
7   define void @testcase_positive_offset() {
8     %dummy = alloca i64, align 8
9     %object = alloca i64, align 8
10     ; Reads from %object at offset 63 * readsize
11     ret void
12   }
13   define void @testcase_positive_offset_out_of_range() {
14     %dummy = alloca i64, align 8
15     %object = alloca i64, align 8
16     ; Reads from %object at offset 64 * readsize
17     ret void
18   }
19   define void @testcase_negative_offset_out_of_range() {
20     %dummy = alloca i64, align 8
21     %object = alloca i64, align 8
22     ; Reads from %object at offset -1 * readsize
23     ret void
24   }
25 ...
26 ---
27 name:            testcase_positive_offset
28 tracksRegLiveness: true
29 stack:
30   - { id: 0, name: dummy, type: default, offset: 0, size: 8, alignment: 8 }
31   - { id: 1, name: object, type: default, offset: 0, size: 8, alignment: 8 }
32 body:             |
33   bb.0 (%ir-block.0):
34     liveins: $p0
36     ; CHECK-LABEL: name: testcase_positive_offset
37     ; CHECK: liveins: $p0
38     ; CHECK: $sp = frame-setup SUBXri $sp, 16, 0
39     ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset <mcsymbol >16
40     ; CHECK: renamable $z0 = LD1RB_IMM renamable $p0, $sp, 63 :: (load (s8) from %ir.object, align 2)
41     ; CHECK: renamable $z0 = LD1RB_H_IMM renamable $p0, $sp, 63 :: (load (s8) from %ir.object, align 2)
42     ; CHECK: renamable $z0 = LD1RB_S_IMM renamable $p0, $sp, 63 :: (load (s8) from %ir.object, align 2)
43     ; CHECK: renamable $z0 = LD1RB_D_IMM renamable $p0, $sp, 63 :: (load (s8) from %ir.object, align 2)
44     ; CHECK: renamable $z0 = LD1RSB_H_IMM renamable $p0, $sp, 63 :: (load (s8) from %ir.object, align 2)
45     ; CHECK: renamable $z0 = LD1RSB_S_IMM renamable $p0, $sp, 63 :: (load (s8) from %ir.object, align 2)
46     ; CHECK: renamable $z0 = LD1RSB_D_IMM renamable $p0, $sp, 63 :: (load (s8) from %ir.object, align 2)
47     ; CHECK: renamable $z0 = LD1RH_IMM renamable $p0, $sp, 63 :: (load (s16) from %ir.object)
48     ; CHECK: renamable $z0 = LD1RH_S_IMM renamable $p0, $sp, 63 :: (load (s16) from %ir.object)
49     ; CHECK: renamable $z0 = LD1RH_D_IMM renamable $p0, $sp, 63 :: (load (s16) from %ir.object)
50     ; CHECK: renamable $z0 = LD1RSH_S_IMM renamable $p0, $sp, 63 :: (load (s16) from %ir.object)
51     ; CHECK: renamable $z0 = LD1RSH_D_IMM renamable $p0, $sp, 63 :: (load (s16) from %ir.object)
52     ; CHECK: renamable $z0 = LD1RW_IMM renamable $p0, $sp, 63 :: (load (s32) from %ir.object)
53     ; CHECK: renamable $z0 = LD1RW_D_IMM renamable $p0, $sp, 63 :: (load (s32) from %ir.object)
54     ; CHECK: renamable $z0 = LD1RSW_IMM renamable $p0, $sp, 63 :: (load (s32) from %ir.object)
55     ; CHECK: renamable $z0 = LD1RD_IMM renamable $p0, $sp, 63 :: (load (s64) from %ir.object)
56     ; CHECK: renamable $z0 = LD1RD_IMM renamable $p0, $sp, 63 :: (load (s64) from %ir.object)
57     ; CHECK: $sp = frame-destroy ADDXri $sp, 16, 0
58     ; CHECK: RET_ReallyLR implicit $z0
59     renamable $z0 = LD1RB_IMM renamable $p0, %stack.1.object, 63 :: (load 1 from %ir.object, align 2)
60     renamable $z0 = LD1RB_H_IMM renamable $p0, %stack.1.object, 63 :: (load 1 from %ir.object, align 2)
61     renamable $z0 = LD1RB_S_IMM renamable $p0, %stack.1.object, 63 :: (load 1 from %ir.object, align 2)
62     renamable $z0 = LD1RB_D_IMM renamable $p0, %stack.1.object, 63 :: (load 1 from %ir.object, align 2)
63     renamable $z0 = LD1RSB_H_IMM renamable $p0, %stack.1.object, 63 :: (load 1 from %ir.object, align 2)
64     renamable $z0 = LD1RSB_S_IMM renamable $p0, %stack.1.object, 63 :: (load 1 from %ir.object, align 2)
65     renamable $z0 = LD1RSB_D_IMM renamable $p0, %stack.1.object, 63 :: (load 1 from %ir.object, align 2)
66     renamable $z0 = LD1RH_IMM renamable $p0, %stack.1.object, 63 :: (load 2 from %ir.object, align 2)
67     renamable $z0 = LD1RH_S_IMM renamable $p0, %stack.1.object, 63 :: (load 2 from %ir.object, align 2)
68     renamable $z0 = LD1RH_D_IMM renamable $p0, %stack.1.object, 63 :: (load 2 from %ir.object, align 2)
69     renamable $z0 = LD1RSH_S_IMM renamable $p0, %stack.1.object, 63 :: (load 2 from %ir.object, align 2)
70     renamable $z0 = LD1RSH_D_IMM renamable $p0, %stack.1.object, 63 :: (load 2 from %ir.object, align 2)
71     renamable $z0 = LD1RW_IMM renamable $p0, %stack.1.object, 63 :: (load 4 from %ir.object, align 4)
72     renamable $z0 = LD1RW_D_IMM renamable $p0, %stack.1.object, 63 :: (load 4 from %ir.object, align 4)
73     renamable $z0 = LD1RSW_IMM renamable $p0, %stack.1.object, 63 :: (load 4 from %ir.object, align 4)
74     renamable $z0 = LD1RD_IMM renamable $p0, %stack.1.object, 63 :: (load 8 from %ir.object, align 8)
75     renamable $z0 = LD1RD_IMM renamable $p0, %stack.1.object, 63 :: (load 8 from %ir.object, align 8)
76     RET_ReallyLR implicit $z0
77 ...
78 ---
79 name:            testcase_positive_offset_out_of_range
80 tracksRegLiveness: true
81 stack:
82   - { id: 0, name: dummy, type: default, offset: 0, size: 8, alignment: 8 }
83   - { id: 1, name: object, type: default, offset: 0, size: 8, alignment: 8 }
84 body:             |
85   bb.0 (%ir-block.0):
86     liveins: $p0
88     ; CHECK-LABEL: name: testcase_positive_offset_out_of_range
89     ; CHECK: liveins: $p0
90     ; CHECK: $sp = frame-setup SUBXri $sp, 16, 0
91     ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset <mcsymbol >16
92     ; CHECK: $x8 = ADDXri $sp, 1, 0
93     ; CHECK: renamable $z0 = LD1RB_IMM renamable $p0, killed $x8, 63 :: (load (s8) from %ir.object, align 2)
94     ; CHECK: $x8 = ADDXri $sp, 1, 0
95     ; CHECK: renamable $z0 = LD1RB_H_IMM renamable $p0, killed $x8, 63 :: (load (s8) from %ir.object, align 2)
96     ; CHECK: $x8 = ADDXri $sp, 1, 0
97     ; CHECK: renamable $z0 = LD1RB_S_IMM renamable $p0, killed $x8, 63 :: (load (s8) from %ir.object, align 2)
98     ; CHECK: $x8 = ADDXri $sp, 1, 0
99     ; CHECK: renamable $z0 = LD1RB_D_IMM renamable $p0, killed $x8, 63 :: (load (s8) from %ir.object, align 2)
100     ; CHECK: $x8 = ADDXri $sp, 1, 0
101     ; CHECK: renamable $z0 = LD1RSB_H_IMM renamable $p0, killed $x8, 63 :: (load (s8) from %ir.object, align 2)
102     ; CHECK: $x8 = ADDXri $sp, 1, 0
103     ; CHECK: renamable $z0 = LD1RSB_S_IMM renamable $p0, killed $x8, 63 :: (load (s8) from %ir.object, align 2)
104     ; CHECK: $x8 = ADDXri $sp, 1, 0
105     ; CHECK: renamable $z0 = LD1RSB_D_IMM renamable $p0, killed $x8, 63 :: (load (s8) from %ir.object, align 2)
106     ; CHECK: $x8 = ADDXri $sp, 2, 0
107     ; CHECK: renamable $z0 = LD1RH_IMM renamable $p0, killed $x8, 63 :: (load (s16) from %ir.object)
108     ; CHECK: $x8 = ADDXri $sp, 2, 0
109     ; CHECK: renamable $z0 = LD1RH_S_IMM renamable $p0, killed $x8, 63 :: (load (s16) from %ir.object)
110     ; CHECK: $x8 = ADDXri $sp, 2, 0
111     ; CHECK: renamable $z0 = LD1RH_D_IMM renamable $p0, killed $x8, 63 :: (load (s16) from %ir.object)
112     ; CHECK: $x8 = ADDXri $sp, 2, 0
113     ; CHECK: renamable $z0 = LD1RSH_S_IMM renamable $p0, killed $x8, 63 :: (load (s16) from %ir.object)
114     ; CHECK: $x8 = ADDXri $sp, 2, 0
115     ; CHECK: renamable $z0 = LD1RSH_D_IMM renamable $p0, killed $x8, 63 :: (load (s16) from %ir.object)
116     ; CHECK: $x8 = ADDXri $sp, 4, 0
117     ; CHECK: renamable $z0 = LD1RW_IMM renamable $p0, killed $x8, 63 :: (load (s32) from %ir.object)
118     ; CHECK: $x8 = ADDXri $sp, 4, 0
119     ; CHECK: renamable $z0 = LD1RW_D_IMM renamable $p0, killed $x8, 63 :: (load (s32) from %ir.object)
120     ; CHECK: $x8 = ADDXri $sp, 4, 0
121     ; CHECK: renamable $z0 = LD1RSW_IMM renamable $p0, killed $x8, 63 :: (load (s32) from %ir.object)
122     ; CHECK: $x8 = ADDXri $sp, 8, 0
123     ; CHECK: renamable $z0 = LD1RD_IMM renamable $p0, killed $x8, 63 :: (load (s64) from %ir.object)
124     ; CHECK: $x8 = ADDXri $sp, 8, 0
125     ; CHECK: renamable $z0 = LD1RD_IMM renamable $p0, killed $x8, 63 :: (load (s64) from %ir.object)
126     ; CHECK: $sp = frame-destroy ADDXri $sp, 16, 0
127     ; CHECK: RET_ReallyLR implicit $z0
128     renamable $z0 = LD1RB_IMM renamable $p0, %stack.1.object, 64 :: (load 1 from %ir.object, align 2)
129     renamable $z0 = LD1RB_H_IMM renamable $p0, %stack.1.object, 64 :: (load 1 from %ir.object, align 2)
130     renamable $z0 = LD1RB_S_IMM renamable $p0, %stack.1.object, 64 :: (load 1 from %ir.object, align 2)
131     renamable $z0 = LD1RB_D_IMM renamable $p0, %stack.1.object, 64 :: (load 1 from %ir.object, align 2)
132     renamable $z0 = LD1RSB_H_IMM renamable $p0, %stack.1.object, 64 :: (load 1 from %ir.object, align 2)
133     renamable $z0 = LD1RSB_S_IMM renamable $p0, %stack.1.object, 64 :: (load 1 from %ir.object, align 2)
134     renamable $z0 = LD1RSB_D_IMM renamable $p0, %stack.1.object, 64 :: (load 1 from %ir.object, align 2)
135     renamable $z0 = LD1RH_IMM renamable $p0, %stack.1.object, 64 :: (load 2 from %ir.object, align 2)
136     renamable $z0 = LD1RH_S_IMM renamable $p0, %stack.1.object, 64 :: (load 2 from %ir.object, align 2)
137     renamable $z0 = LD1RH_D_IMM renamable $p0, %stack.1.object, 64 :: (load 2 from %ir.object, align 2)
138     renamable $z0 = LD1RSH_S_IMM renamable $p0, %stack.1.object, 64 :: (load 2 from %ir.object, align 2)
139     renamable $z0 = LD1RSH_D_IMM renamable $p0, %stack.1.object, 64 :: (load 2 from %ir.object, align 2)
140     renamable $z0 = LD1RW_IMM renamable $p0, %stack.1.object, 64 :: (load 4 from %ir.object, align 4)
141     renamable $z0 = LD1RW_D_IMM renamable $p0, %stack.1.object, 64 :: (load 4 from %ir.object, align 4)
142     renamable $z0 = LD1RSW_IMM renamable $p0, %stack.1.object, 64 :: (load 4 from %ir.object, align 4)
143     renamable $z0 = LD1RD_IMM renamable $p0, %stack.1.object, 64 :: (load 8 from %ir.object, align 8)
144     renamable $z0 = LD1RD_IMM renamable $p0, %stack.1.object, 64 :: (load 8 from %ir.object, align 8)
145     RET_ReallyLR implicit $z0
150 name:            testcase_negative_offset_out_of_range
151 tracksRegLiveness: true
152 stack:
153   - { id: 0, name: dummy, type: default, offset: 0, size: 8, alignment: 8 }
154   - { id: 1, name: object, type: default, offset: 0, size: 8, alignment: 8 }
155 body:             |
156   bb.0 (%ir-block.0):
157     liveins: $p0
159     ; CHECK-LABEL: name: testcase_negative_offset_out_of_range
160     ; CHECK: liveins: $p0
161     ; CHECK: $sp = frame-setup SUBXri $sp, 16, 0
162     ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset <mcsymbol >16
163     ; CHECK: $x8 = SUBXri $sp, 1, 0
164     ; CHECK: renamable $z0 = LD1RB_IMM renamable $p0, killed $x8, 0 :: (load (s8) from %ir.object, align 2)
165     ; CHECK: $x8 = SUBXri $sp, 1, 0
166     ; CHECK: renamable $z0 = LD1RB_H_IMM renamable $p0, killed $x8, 0 :: (load (s8) from %ir.object, align 2)
167     ; CHECK: $x8 = SUBXri $sp, 1, 0
168     ; CHECK: renamable $z0 = LD1RB_S_IMM renamable $p0, killed $x8, 0 :: (load (s8) from %ir.object, align 2)
169     ; CHECK: $x8 = SUBXri $sp, 1, 0
170     ; CHECK: renamable $z0 = LD1RB_D_IMM renamable $p0, killed $x8, 0 :: (load (s8) from %ir.object, align 2)
171     ; CHECK: $x8 = SUBXri $sp, 1, 0
172     ; CHECK: renamable $z0 = LD1RSB_H_IMM renamable $p0, killed $x8, 0 :: (load (s8) from %ir.object, align 2)
173     ; CHECK: $x8 = SUBXri $sp, 1, 0
174     ; CHECK: renamable $z0 = LD1RSB_S_IMM renamable $p0, killed $x8, 0 :: (load (s8) from %ir.object, align 2)
175     ; CHECK: $x8 = SUBXri $sp, 1, 0
176     ; CHECK: renamable $z0 = LD1RSB_D_IMM renamable $p0, killed $x8, 0 :: (load (s8) from %ir.object, align 2)
177     ; CHECK: $x8 = SUBXri $sp, 2, 0
178     ; CHECK: renamable $z0 = LD1RH_IMM renamable $p0, killed $x8, 0 :: (load (s16) from %ir.object)
179     ; CHECK: $x8 = SUBXri $sp, 2, 0
180     ; CHECK: renamable $z0 = LD1RH_S_IMM renamable $p0, killed $x8, 0 :: (load (s16) from %ir.object)
181     ; CHECK: $x8 = SUBXri $sp, 2, 0
182     ; CHECK: renamable $z0 = LD1RH_D_IMM renamable $p0, killed $x8, 0 :: (load (s16) from %ir.object)
183     ; CHECK: $x8 = SUBXri $sp, 2, 0
184     ; CHECK: renamable $z0 = LD1RSH_S_IMM renamable $p0, killed $x8, 0 :: (load (s16) from %ir.object)
185     ; CHECK: $x8 = SUBXri $sp, 2, 0
186     ; CHECK: renamable $z0 = LD1RSH_D_IMM renamable $p0, killed $x8, 0 :: (load (s16) from %ir.object)
187     ; CHECK: $x8 = SUBXri $sp, 4, 0
188     ; CHECK: renamable $z0 = LD1RW_IMM renamable $p0, killed $x8, 0 :: (load (s32) from %ir.object)
189     ; CHECK: $x8 = SUBXri $sp, 4, 0
190     ; CHECK: renamable $z0 = LD1RW_D_IMM renamable $p0, killed $x8, 0 :: (load (s32) from %ir.object)
191     ; CHECK: $x8 = SUBXri $sp, 4, 0
192     ; CHECK: renamable $z0 = LD1RSW_IMM renamable $p0, killed $x8, 0 :: (load (s32) from %ir.object)
193     ; CHECK: $x8 = SUBXri $sp, 8, 0
194     ; CHECK: renamable $z0 = LD1RD_IMM renamable $p0, killed $x8, 0 :: (load (s64) from %ir.object)
195     ; CHECK: $x8 = SUBXri $sp, 8, 0
196     ; CHECK: renamable $z0 = LD1RD_IMM renamable $p0, killed $x8, 0 :: (load (s64) from %ir.object)
197     ; CHECK: $sp = frame-destroy ADDXri $sp, 16, 0
198     ; CHECK: RET_ReallyLR implicit $z0
199     renamable $z0 = LD1RB_IMM renamable $p0, %stack.1.object, -1 :: (load 1 from %ir.object, align 2)
200     renamable $z0 = LD1RB_H_IMM renamable $p0, %stack.1.object, -1 :: (load 1 from %ir.object, align 2)
201     renamable $z0 = LD1RB_S_IMM renamable $p0, %stack.1.object, -1 :: (load 1 from %ir.object, align 2)
202     renamable $z0 = LD1RB_D_IMM renamable $p0, %stack.1.object, -1 :: (load 1 from %ir.object, align 2)
203     renamable $z0 = LD1RSB_H_IMM renamable $p0, %stack.1.object, -1 :: (load 1 from %ir.object, align 2)
204     renamable $z0 = LD1RSB_S_IMM renamable $p0, %stack.1.object, -1 :: (load 1 from %ir.object, align 2)
205     renamable $z0 = LD1RSB_D_IMM renamable $p0, %stack.1.object, -1 :: (load 1 from %ir.object, align 2)
206     renamable $z0 = LD1RH_IMM renamable $p0, %stack.1.object, -1 :: (load 2 from %ir.object, align 2)
207     renamable $z0 = LD1RH_S_IMM renamable $p0, %stack.1.object, -1 :: (load 2 from %ir.object, align 2)
208     renamable $z0 = LD1RH_D_IMM renamable $p0, %stack.1.object, -1 :: (load 2 from %ir.object, align 2)
209     renamable $z0 = LD1RSH_S_IMM renamable $p0, %stack.1.object, -1 :: (load 2 from %ir.object, align 2)
210     renamable $z0 = LD1RSH_D_IMM renamable $p0, %stack.1.object, -1 :: (load 2 from %ir.object, align 2)
211     renamable $z0 = LD1RW_IMM renamable $p0, %stack.1.object, -1 :: (load 4 from %ir.object, align 4)
212     renamable $z0 = LD1RW_D_IMM renamable $p0, %stack.1.object, -1 :: (load 4 from %ir.object, align 4)
213     renamable $z0 = LD1RSW_IMM renamable $p0, %stack.1.object, -1 :: (load 4 from %ir.object, align 4)
214     renamable $z0 = LD1RD_IMM renamable $p0, %stack.1.object, -1 :: (load 8 from %ir.object, align 8)
215     renamable $z0 = LD1RD_IMM renamable $p0, %stack.1.object, -1 :: (load 8 from %ir.object, align 8)
216     RET_ReallyLR implicit $z0