1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -march=amdgcn -mcpu=tahiti -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX6 %s
3 # RUN: llc -march=amdgcn -mcpu=hawaii -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX7 %s
4 # RUN: llc -march=amdgcn -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX7 %s
5 # RUN: llc -march=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s
6 # RUN: llc -march=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s
10 name: store_local_s32_to_4
13 tracksRegLiveness: true
15 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
16 scratchWaveOffsetReg: $sgpr4
17 stackPtrOffsetReg: $sgpr32
21 liveins: $vgpr0, $vgpr1
23 ; GFX6-LABEL: name: store_local_s32_to_4
24 ; GFX6: liveins: $vgpr0, $vgpr1
25 ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
26 ; GFX6: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
27 ; GFX6: $m0 = S_MOV_B32 -1
28 ; GFX6: DS_WRITE_B32 [[COPY1]], [[COPY]], 0, 0, implicit $m0, implicit $exec :: (store 4, addrspace 3)
29 ; GFX7-LABEL: name: store_local_s32_to_4
30 ; GFX7: liveins: $vgpr0, $vgpr1
31 ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
32 ; GFX7: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
33 ; GFX7: $m0 = S_MOV_B32 -1
34 ; GFX7: DS_WRITE_B32 [[COPY1]], [[COPY]], 0, 0, implicit $m0, implicit $exec :: (store 4, addrspace 3)
35 ; GFX9-LABEL: name: store_local_s32_to_4
36 ; GFX9: liveins: $vgpr0, $vgpr1
37 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
38 ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
39 ; GFX9: DS_WRITE_B32_gfx9 [[COPY1]], [[COPY]], 0, 0, implicit $exec :: (store 4, addrspace 3)
40 %0:vgpr(s32) = COPY $vgpr0
41 %1:vgpr(p3) = COPY $vgpr1
42 G_STORE %0, %1 :: (store 4, align 4, addrspace 3)
48 name: store_local_s32_to_2
51 tracksRegLiveness: true
53 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
54 scratchWaveOffsetReg: $sgpr4
55 stackPtrOffsetReg: $sgpr32
59 liveins: $vgpr0, $vgpr1
61 ; GFX6-LABEL: name: store_local_s32_to_2
62 ; GFX6: liveins: $vgpr0, $vgpr1
63 ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
64 ; GFX6: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
65 ; GFX6: $m0 = S_MOV_B32 -1
66 ; GFX6: DS_WRITE_B16 [[COPY1]], [[COPY]], 0, 0, implicit $m0, implicit $exec :: (store 2, addrspace 3)
67 ; GFX7-LABEL: name: store_local_s32_to_2
68 ; GFX7: liveins: $vgpr0, $vgpr1
69 ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
70 ; GFX7: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
71 ; GFX7: $m0 = S_MOV_B32 -1
72 ; GFX7: DS_WRITE_B16 [[COPY1]], [[COPY]], 0, 0, implicit $m0, implicit $exec :: (store 2, addrspace 3)
73 ; GFX9-LABEL: name: store_local_s32_to_2
74 ; GFX9: liveins: $vgpr0, $vgpr1
75 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
76 ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
77 ; GFX9: DS_WRITE_B16_gfx9 [[COPY1]], [[COPY]], 0, 0, implicit $exec :: (store 2, addrspace 3)
78 %0:vgpr(s32) = COPY $vgpr0
79 %1:vgpr(p3) = COPY $vgpr1
80 G_STORE %0, %1 :: (store 2, align 2, addrspace 3)
86 name: store_local_s32_to_1
89 tracksRegLiveness: true
91 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
92 scratchWaveOffsetReg: $sgpr4
93 stackPtrOffsetReg: $sgpr32
97 liveins: $vgpr0, $vgpr1
99 ; GFX6-LABEL: name: store_local_s32_to_1
100 ; GFX6: liveins: $vgpr0, $vgpr1
101 ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
102 ; GFX6: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
103 ; GFX6: $m0 = S_MOV_B32 -1
104 ; GFX6: DS_WRITE_B8 [[COPY1]], [[COPY]], 0, 0, implicit $m0, implicit $exec :: (store 1, addrspace 3)
105 ; GFX7-LABEL: name: store_local_s32_to_1
106 ; GFX7: liveins: $vgpr0, $vgpr1
107 ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
108 ; GFX7: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
109 ; GFX7: $m0 = S_MOV_B32 -1
110 ; GFX7: DS_WRITE_B8 [[COPY1]], [[COPY]], 0, 0, implicit $m0, implicit $exec :: (store 1, addrspace 3)
111 ; GFX9-LABEL: name: store_local_s32_to_1
112 ; GFX9: liveins: $vgpr0, $vgpr1
113 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
114 ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
115 ; GFX9: DS_WRITE_B8_gfx9 [[COPY1]], [[COPY]], 0, 0, implicit $exec :: (store 1, addrspace 3)
116 %0:vgpr(s32) = COPY $vgpr0
117 %1:vgpr(p3) = COPY $vgpr1
118 G_STORE %0, %1 :: (store 1, align 1, addrspace 3)
124 name: store_local_v2s16
126 regBankSelected: true
127 tracksRegLiveness: true
129 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
130 scratchWaveOffsetReg: $sgpr4
131 stackPtrOffsetReg: $sgpr32
135 liveins: $vgpr0, $vgpr1
137 ; GFX6-LABEL: name: store_local_v2s16
138 ; GFX6: liveins: $vgpr0, $vgpr1
139 ; GFX6: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0
140 ; GFX6: [[COPY1:%[0-9]+]]:vgpr(p3) = COPY $vgpr1
141 ; GFX6: $m0 = S_MOV_B32 -1
142 ; GFX6: G_STORE [[COPY]](<2 x s16>), [[COPY1]](p3) :: (store 4, addrspace 3)
143 ; GFX7-LABEL: name: store_local_v2s16
144 ; GFX7: liveins: $vgpr0, $vgpr1
145 ; GFX7: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0
146 ; GFX7: [[COPY1:%[0-9]+]]:vgpr(p3) = COPY $vgpr1
147 ; GFX7: $m0 = S_MOV_B32 -1
148 ; GFX7: G_STORE [[COPY]](<2 x s16>), [[COPY1]](p3) :: (store 4, addrspace 3)
149 ; GFX9-LABEL: name: store_local_v2s16
150 ; GFX9: liveins: $vgpr0, $vgpr1
151 ; GFX9: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0
152 ; GFX9: [[COPY1:%[0-9]+]]:vgpr(p3) = COPY $vgpr1
153 ; GFX9: G_STORE [[COPY]](<2 x s16>), [[COPY1]](p3) :: (store 4, addrspace 3)
154 %0:vgpr(<2 x s16>) = COPY $vgpr0
155 %1:vgpr(p3) = COPY $vgpr1
156 G_STORE %0, %1 :: (store 4, align 4, addrspace 3)
164 regBankSelected: true
165 tracksRegLiveness: true
167 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
168 scratchWaveOffsetReg: $sgpr4
169 stackPtrOffsetReg: $sgpr32
173 liveins: $vgpr0, $vgpr1
175 ; GFX6-LABEL: name: store_local_p3
176 ; GFX6: liveins: $vgpr0, $vgpr1
177 ; GFX6: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
178 ; GFX6: [[COPY1:%[0-9]+]]:vgpr(p3) = COPY $vgpr1
179 ; GFX6: $m0 = S_MOV_B32 -1
180 ; GFX6: G_STORE [[COPY]](p3), [[COPY1]](p3) :: (store 4, addrspace 3)
181 ; GFX7-LABEL: name: store_local_p3
182 ; GFX7: liveins: $vgpr0, $vgpr1
183 ; GFX7: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
184 ; GFX7: [[COPY1:%[0-9]+]]:vgpr(p3) = COPY $vgpr1
185 ; GFX7: $m0 = S_MOV_B32 -1
186 ; GFX7: G_STORE [[COPY]](p3), [[COPY1]](p3) :: (store 4, addrspace 3)
187 ; GFX9-LABEL: name: store_local_p3
188 ; GFX9: liveins: $vgpr0, $vgpr1
189 ; GFX9: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
190 ; GFX9: [[COPY1:%[0-9]+]]:vgpr(p3) = COPY $vgpr1
191 ; GFX9: G_STORE [[COPY]](p3), [[COPY1]](p3) :: (store 4, addrspace 3)
192 %0:vgpr(p3) = COPY $vgpr0
193 %1:vgpr(p3) = COPY $vgpr1
194 G_STORE %0, %1 :: (store 4, align 4, addrspace 3)
200 name: store_local_s32_to_1_constant_4095
202 regBankSelected: true
203 tracksRegLiveness: true
208 ; GFX6-LABEL: name: store_local_s32_to_1_constant_4095
209 ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4095, implicit $exec
210 ; GFX6: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
211 ; GFX6: $m0 = S_MOV_B32 -1
212 ; GFX6: DS_WRITE_B8 [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_1]], 0, 0, implicit $m0, implicit $exec :: (store 1, addrspace 3)
213 ; GFX7-LABEL: name: store_local_s32_to_1_constant_4095
214 ; GFX7: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4095, implicit $exec
215 ; GFX7: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
216 ; GFX7: $m0 = S_MOV_B32 -1
217 ; GFX7: DS_WRITE_B8 [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_1]], 0, 0, implicit $m0, implicit $exec :: (store 1, addrspace 3)
218 ; GFX9-LABEL: name: store_local_s32_to_1_constant_4095
219 ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4095, implicit $exec
220 ; GFX9: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
221 ; GFX9: DS_WRITE_B8_gfx9 [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_1]], 0, 0, implicit $exec :: (store 1, addrspace 3)
222 %0:vgpr(p3) = G_CONSTANT i32 4095
223 %1:vgpr(s32) = G_CONSTANT i32 0
224 G_STORE %1, %0 :: (store 1, align 1, addrspace 3)
230 name: store_local_s32_to_1_constant_4096
232 regBankSelected: true
233 tracksRegLiveness: true
235 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
236 scratchWaveOffsetReg: $sgpr4
237 stackPtrOffsetReg: $sgpr32
239 - { id: 0, size: 4096, alignment: 4 }
244 ; GFX6-LABEL: name: store_local_s32_to_1_constant_4096
245 ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
246 ; GFX6: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
247 ; GFX6: $m0 = S_MOV_B32 -1
248 ; GFX6: DS_WRITE_B8 [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_1]], 0, 0, implicit $m0, implicit $exec :: (store 1, addrspace 3)
249 ; GFX7-LABEL: name: store_local_s32_to_1_constant_4096
250 ; GFX7: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
251 ; GFX7: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
252 ; GFX7: $m0 = S_MOV_B32 -1
253 ; GFX7: DS_WRITE_B8 [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_1]], 0, 0, implicit $m0, implicit $exec :: (store 1, addrspace 3)
254 ; GFX9-LABEL: name: store_local_s32_to_1_constant_4096
255 ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
256 ; GFX9: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
257 ; GFX9: DS_WRITE_B8_gfx9 [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_1]], 0, 0, implicit $exec :: (store 1, addrspace 3)
258 %0:vgpr(p3) = G_CONSTANT i32 4096
259 %1:vgpr(s32) = G_CONSTANT i32 0
260 G_STORE %1, %0 :: (store 1, align 1, addrspace 3)