xref: /llvm-project/llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/store-rv64.mir (revision eff60d83b0533954eda153fbbabb3e99d46bde94)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=riscv64 -run-pass=instruction-select %s -o - \
3# RUN:   -disable-gisel-legality-check | FileCheck %s
4
5---
6name:            store_i8_i64
7legalized:       true
8regBankSelected: true
9tracksRegLiveness: true
10body:            |
11  bb.0:
12    liveins: $x10, $x11
13
14    ; CHECK-LABEL: name: store_i8_i64
15    ; CHECK: liveins: $x10, $x11
16    ; CHECK-NEXT: {{  $}}
17    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
18    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
19    ; CHECK-NEXT: SB [[COPY]], [[COPY1]], 0 :: (store (s8))
20    ; CHECK-NEXT: PseudoRET
21    %0:gprb(s64) = COPY $x10
22    %1:gprb(p0) = COPY $x11
23    G_STORE %0(s64), %1(p0) :: (store (s8))
24    PseudoRET
25
26...
27---
28name:            store_i16_i64
29legalized:       true
30regBankSelected: true
31tracksRegLiveness: true
32body:            |
33  bb.0:
34    liveins: $x10, $x11
35
36    ; CHECK-LABEL: name: store_i16_i64
37    ; CHECK: liveins: $x10, $x11
38    ; CHECK-NEXT: {{  $}}
39    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
40    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
41    ; CHECK-NEXT: SH [[COPY]], [[COPY1]], 0 :: (store (s16))
42    ; CHECK-NEXT: PseudoRET
43    %0:gprb(s64) = COPY $x10
44    %1:gprb(p0) = COPY $x11
45    G_STORE %0(s64), %1(p0) :: (store (s16))
46    PseudoRET
47
48...
49---
50name:            store_i8_i16
51legalized:       true
52regBankSelected: true
53tracksRegLiveness: true
54body:            |
55  bb.0:
56    liveins: $x10, $x11
57
58    ; CHECK-LABEL: name: store_i8_i16
59    ; CHECK: liveins: $x10, $x11
60    ; CHECK-NEXT: {{  $}}
61    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
62    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
63    ; CHECK-NEXT: SB [[COPY]], [[COPY1]], 0 :: (store (s8))
64    ; CHECK-NEXT: PseudoRET
65    %0:gprb(s64) = COPY $x10
66    %1:gprb(p0) = COPY $x11
67    %2:gprb(s16) = G_TRUNC %0
68    G_STORE %2(s16), %1(p0) :: (store (s8))
69    PseudoRET
70
71...
72---
73name:            store_i16_i16
74legalized:       true
75regBankSelected: true
76tracksRegLiveness: true
77body:            |
78  bb.0:
79    liveins: $x10, $x11
80
81    ; CHECK-LABEL: name: store_i16_i16
82    ; CHECK: liveins: $x10, $x11
83    ; CHECK-NEXT: {{  $}}
84    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
85    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
86    ; CHECK-NEXT: SH [[COPY]], [[COPY1]], 0 :: (store (s16))
87    ; CHECK-NEXT: PseudoRET
88    %0:gprb(s64) = COPY $x10
89    %1:gprb(p0) = COPY $x11
90    %2:gprb(s16) = G_TRUNC %0
91    G_STORE %2(s16), %1(p0) :: (store (s16))
92    PseudoRET
93
94...
95---
96name:            store_i32_i64
97legalized:       true
98regBankSelected: true
99tracksRegLiveness: true
100body:            |
101  bb.0:
102    liveins: $x10, $x11
103
104    ; CHECK-LABEL: name: store_i32_i64
105    ; CHECK: liveins: $x10, $x11
106    ; CHECK-NEXT: {{  $}}
107    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
108    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
109    ; CHECK-NEXT: SW [[COPY]], [[COPY1]], 0 :: (store (s32))
110    ; CHECK-NEXT: PseudoRET
111    %0:gprb(s64) = COPY $x10
112    %1:gprb(p0) = COPY $x11
113    G_STORE %0(s64), %1(p0) :: (store (s32))
114    PseudoRET
115
116...
117---
118name:            store_i64_i64
119legalized:       true
120regBankSelected: true
121tracksRegLiveness: true
122body:            |
123  bb.0:
124    liveins: $x10, $x11
125
126    ; CHECK-LABEL: name: store_i64_i64
127    ; CHECK: liveins: $x10, $x11
128    ; CHECK-NEXT: {{  $}}
129    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
130    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
131    ; CHECK-NEXT: SD [[COPY]], [[COPY1]], 0 :: (store (s64))
132    ; CHECK-NEXT: PseudoRET
133    %0:gprb(s64) = COPY $x10
134    %1:gprb(p0) = COPY $x11
135    G_STORE %0(s64), %1(p0) :: (store (s64))
136    PseudoRET
137
138...
139---
140name:            store_p0
141legalized:       true
142regBankSelected: true
143tracksRegLiveness: true
144body:            |
145  bb.0:
146    liveins: $x10, $x11
147
148    ; CHECK-LABEL: name: store_p0
149    ; CHECK: liveins: $x10, $x11
150    ; CHECK-NEXT: {{  $}}
151    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
152    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
153    ; CHECK-NEXT: SD [[COPY]], [[COPY1]], 0 :: (store (p0))
154    ; CHECK-NEXT: PseudoRET
155    %0:gprb(p0) = COPY $x10
156    %1:gprb(p0) = COPY $x11
157    G_STORE %0(p0), %1(p0) :: (store (p0))
158    PseudoRET
159
160...
161---
162name:            truncstore_i8_i32
163legalized:       true
164regBankSelected: true
165tracksRegLiveness: true
166body:             |
167  bb.0:
168    liveins: $x10, $x11
169
170    ; CHECK-LABEL: name: truncstore_i8_i32
171    ; CHECK: liveins: $x10, $x11
172    ; CHECK-NEXT: {{  $}}
173    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
174    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
175    ; CHECK-NEXT: SB [[COPY1]], [[COPY]], 0 :: (store (s8))
176    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr = COPY $x0
177    ; CHECK-NEXT: $x10 = COPY [[COPY2]]
178    ; CHECK-NEXT: PseudoRET implicit $x10
179    %0:gprb(p0) = COPY $x10
180    %3:gprb(s64) = COPY $x11
181    %9:gprb(s32) = G_TRUNC %3(s64)
182    G_STORE %9(s32), %0(p0) :: (store (s8))
183    %7:gprb(s64) = G_CONSTANT i64 0
184    $x10 = COPY %7(s64)
185    PseudoRET implicit $x10
186
187...
188---
189name:            truncstore_i16_i32
190legalized:       true
191regBankSelected: true
192tracksRegLiveness: true
193body:             |
194  bb.0:
195    liveins: $x10, $x11
196
197    ; CHECK-LABEL: name: truncstore_i16_i32
198    ; CHECK: liveins: $x10, $x11
199    ; CHECK-NEXT: {{  $}}
200    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
201    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
202    ; CHECK-NEXT: SH [[COPY1]], [[COPY]], 0 :: (store (s16))
203    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr = COPY $x0
204    ; CHECK-NEXT: $x10 = COPY [[COPY2]]
205    ; CHECK-NEXT: PseudoRET implicit $x10
206    %0:gprb(p0) = COPY $x10
207    %3:gprb(s64) = COPY $x11
208    %9:gprb(s32) = G_TRUNC %3(s64)
209    G_STORE %9(s32), %0(p0) :: (store (s16))
210    %7:gprb(s64) = G_CONSTANT i64 0
211    $x10 = COPY %7(s64)
212    PseudoRET implicit $x10
213
214...
215---
216name:            store_i32_i32
217legalized:       true
218regBankSelected: true
219tracksRegLiveness: true
220body:             |
221  bb.0:
222    liveins: $x10, $x11
223
224    ; CHECK-LABEL: name: store_i32_i32
225    ; CHECK: liveins: $x10, $x11
226    ; CHECK-NEXT: {{  $}}
227    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
228    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
229    ; CHECK-NEXT: SW [[COPY1]], [[COPY]], 0 :: (store (s32))
230    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr = COPY $x0
231    ; CHECK-NEXT: $x10 = COPY [[COPY2]]
232    ; CHECK-NEXT: PseudoRET implicit $x10
233    %0:gprb(p0) = COPY $x10
234    %3:gprb(s64) = COPY $x11
235    %9:gprb(s32) = G_TRUNC %3(s64)
236    G_STORE %9(s32), %0(p0) :: (store (s32))
237    %7:gprb(s64) = G_CONSTANT i64 0
238    $x10 = COPY %7(s64)
239    PseudoRET implicit $x10
240
241...
242---
243name:            store_fi_i64_i64
244legalized:       true
245regBankSelected: true
246tracksRegLiveness: true
247
248stack:
249  - { id: 0, offset: 0, size: 8, alignment: 8 }
250
251body:            |
252  bb.0:
253    liveins: $x10
254
255    ; CHECK-LABEL: name: store_fi_i64_i64
256    ; CHECK: liveins: $x10
257    ; CHECK-NEXT: {{  $}}
258    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
259    ; CHECK-NEXT: SD [[COPY]], %stack.0, 0 :: (store (s64))
260    ; CHECK-NEXT: PseudoRET
261    %0:gprb(s64) = COPY $x10
262    %1:gprb(p0) = G_FRAME_INDEX %stack.0
263    G_STORE %0(s64), %1(p0) :: (store (s64))
264    PseudoRET
265
266...
267---
268name:            store_fi_gep_i64_i64
269legalized:       true
270regBankSelected: true
271tracksRegLiveness: true
272
273stack:
274  - { id: 0, offset: 0, size: 16, alignment: 8 }
275
276body:            |
277  bb.0:
278    liveins: $x10
279
280    ; CHECK-LABEL: name: store_fi_gep_i64_i64
281    ; CHECK: liveins: $x10
282    ; CHECK-NEXT: {{  $}}
283    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
284    ; CHECK-NEXT: SD [[COPY]], %stack.0, 8 :: (store (s64))
285    ; CHECK-NEXT: PseudoRET
286    %0:gprb(s64) = COPY $x10
287    %1:gprb(p0) = G_FRAME_INDEX %stack.0
288    %2:gprb(s64) = G_CONSTANT i64 8
289    %3:gprb(p0) = G_PTR_ADD %1(p0), %2(s64)
290    G_STORE %0(s64), %3(p0) :: (store (s64))
291    PseudoRET
292
293...
294---
295name:            store_gep_i64_i64
296legalized:       true
297regBankSelected: true
298tracksRegLiveness: true
299body:            |
300  bb.0:
301    liveins: $x10, $x11
302
303    ; CHECK-LABEL: name: store_gep_i64_i64
304    ; CHECK: liveins: $x10, $x11
305    ; CHECK-NEXT: {{  $}}
306    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
307    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
308    ; CHECK-NEXT: SD [[COPY]], [[COPY1]], 8 :: (store (s64))
309    ; CHECK-NEXT: PseudoRET
310    %0:gprb(s64) = COPY $x10
311    %1:gprb(p0) = COPY $x11
312    %2:gprb(s64) = G_CONSTANT i64 8
313    %3:gprb(p0) = G_PTR_ADD %1(p0), %2(s64)
314    G_STORE %0(s64), %3(p0) :: (store (s64))
315    PseudoRET
316
317...
318