[AMDGPU] Make v8i16/v8f16 legal
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / inst-select-load-local-128.mir
blob1083d43381939926dd42b6ef71df4e83afe53b3d
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -amdgpu-global-isel-new-legality -march=amdgcn -mcpu=hawaii -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX7 %s
3 # RUN: llc -amdgpu-global-isel-new-legality -march=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s
4 # RUN: llc -amdgpu-global-isel-new-legality -march=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX10 %s
6 ---
8 name: load_local_v4s32_align16
9 legalized:       true
10 regBankSelected: true
11 tracksRegLiveness: true
13 body: |
14   bb.0:
15     liveins:  $vgpr0
17     ; GFX7-LABEL: name: load_local_v4s32_align16
18     ; GFX7: liveins: $vgpr0
19     ; GFX7-NEXT: {{  $}}
20     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
21     ; GFX7-NEXT: $m0 = S_MOV_B32 -1
22     ; GFX7-NEXT: [[DS_READ_B128_:%[0-9]+]]:vreg_128 = DS_READ_B128 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (<4 x s32>), addrspace 3)
23     ; GFX7-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ_B128_]]
24     ; GFX9-LABEL: name: load_local_v4s32_align16
25     ; GFX9: liveins: $vgpr0
26     ; GFX9-NEXT: {{  $}}
27     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
28     ; GFX9-NEXT: [[DS_READ_B128_gfx9_:%[0-9]+]]:vreg_128 = DS_READ_B128_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (<4 x s32>), addrspace 3)
29     ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ_B128_gfx9_]]
30     ; GFX10-LABEL: name: load_local_v4s32_align16
31     ; GFX10: liveins: $vgpr0
32     ; GFX10-NEXT: {{  $}}
33     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
34     ; GFX10-NEXT: [[DS_READ_B128_gfx9_:%[0-9]+]]:vreg_128 = DS_READ_B128_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (<4 x s32>), addrspace 3)
35     ; GFX10-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ_B128_gfx9_]]
36     %0:vgpr(p3) = COPY $vgpr0
37     %1:vgpr(<4 x s32>) = G_LOAD %0 :: (load (<4 x s32>), align 16, addrspace 3)
38     $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1
40 ...
42 ---
44 name: load_local_v4s32_align_8
45 legalized:       true
46 regBankSelected: true
47 tracksRegLiveness: true
49 body: |
50   bb.0:
51     liveins:  $vgpr0
53     ; GFX7-LABEL: name: load_local_v4s32_align_8
54     ; GFX7: liveins: $vgpr0
55     ; GFX7-NEXT: {{  $}}
56     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
57     ; GFX7-NEXT: $m0 = S_MOV_B32 -1
58     ; GFX7-NEXT: [[DS_READ2_B64_:%[0-9]+]]:vreg_128 = DS_READ2_B64 [[COPY]], 0, 1, 0, implicit $m0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3)
59     ; GFX7-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_]]
60     ; GFX9-LABEL: name: load_local_v4s32_align_8
61     ; GFX9: liveins: $vgpr0
62     ; GFX9-NEXT: {{  $}}
63     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
64     ; GFX9-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3)
65     ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]]
66     ; GFX10-LABEL: name: load_local_v4s32_align_8
67     ; GFX10: liveins: $vgpr0
68     ; GFX10-NEXT: {{  $}}
69     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
70     ; GFX10-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3)
71     ; GFX10-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]]
72     %0:vgpr(p3) = COPY $vgpr0
73     %1:vgpr(<4 x s32>) = G_LOAD %0 :: (load (<4 x s32>), align 8, addrspace 3)
74     $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1
76 ...
78 ---
80 name: load_local_v4s32_align_8_offset_160
81 legalized:       true
82 regBankSelected: true
83 tracksRegLiveness: true
85 body: |
86   bb.0:
87     liveins:  $vgpr0
89     ; GFX7-LABEL: name: load_local_v4s32_align_8_offset_160
90     ; GFX7: liveins: $vgpr0
91     ; GFX7-NEXT: {{  $}}
92     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
93     ; GFX7-NEXT: $m0 = S_MOV_B32 -1
94     ; GFX7-NEXT: [[DS_READ2_B64_:%[0-9]+]]:vreg_128 = DS_READ2_B64 [[COPY]], 50, 51, 0, implicit $m0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3)
95     ; GFX7-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_]]
96     ; GFX9-LABEL: name: load_local_v4s32_align_8_offset_160
97     ; GFX9: liveins: $vgpr0
98     ; GFX9-NEXT: {{  $}}
99     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
100     ; GFX9-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 50, 51, 0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3)
101     ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]]
102     ; GFX10-LABEL: name: load_local_v4s32_align_8_offset_160
103     ; GFX10: liveins: $vgpr0
104     ; GFX10-NEXT: {{  $}}
105     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
106     ; GFX10-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 50, 51, 0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3)
107     ; GFX10-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]]
108     %0:vgpr(p3) = COPY $vgpr0
109     %1:vgpr(s32) = G_CONSTANT i32 400
110     %2:vgpr(p3) = G_PTR_ADD %0, %1
111     %3:vgpr(<4 x s32>) = G_LOAD %2 :: (load (<4 x s32>), align 8, addrspace 3)
112     $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %3
118 name: load_local_v4s32_align_8_offset_320
119 legalized:       true
120 regBankSelected: true
121 tracksRegLiveness: true
123 body: |
124   bb.0:
125     liveins:  $vgpr0
127     ; GFX7-LABEL: name: load_local_v4s32_align_8_offset_320
128     ; GFX7: liveins: $vgpr0
129     ; GFX7-NEXT: {{  $}}
130     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
131     ; GFX7-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4000, implicit $exec
132     ; GFX7-NEXT: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
133     ; GFX7-NEXT: $m0 = S_MOV_B32 -1
134     ; GFX7-NEXT: [[DS_READ2_B64_:%[0-9]+]]:vreg_128 = DS_READ2_B64 %2, 0, 1, 0, implicit $m0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3)
135     ; GFX7-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_]]
136     ; GFX9-LABEL: name: load_local_v4s32_align_8_offset_320
137     ; GFX9: liveins: $vgpr0
138     ; GFX9-NEXT: {{  $}}
139     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
140     ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4000, implicit $exec
141     ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
142     ; GFX9-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[V_ADD_U32_e64_]], 0, 1, 0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3)
143     ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]]
144     ; GFX10-LABEL: name: load_local_v4s32_align_8_offset_320
145     ; GFX10: liveins: $vgpr0
146     ; GFX10-NEXT: {{  $}}
147     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
148     ; GFX10-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4000, implicit $exec
149     ; GFX10-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
150     ; GFX10-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[V_ADD_U32_e64_]], 0, 1, 0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3)
151     ; GFX10-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]]
152     %0:vgpr(p3) = COPY $vgpr0
153     %1:vgpr(s32) = G_CONSTANT i32 4000
154     %2:vgpr(p3) = G_PTR_ADD %0, %1
155     %3:vgpr(<4 x s32>) = G_LOAD %2 :: (load (<4 x s32>), align 8, addrspace 3)
156     $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %3
162 name: load_local_v2s64
163 legalized:       true
164 regBankSelected: true
165 tracksRegLiveness: true
167 body: |
168   bb.0:
169     liveins:  $vgpr0
171     ; GFX7-LABEL: name: load_local_v2s64
172     ; GFX7: liveins: $vgpr0
173     ; GFX7-NEXT: {{  $}}
174     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
175     ; GFX7-NEXT: $m0 = S_MOV_B32 -1
176     ; GFX7-NEXT: [[DS_READ2_B64_:%[0-9]+]]:vreg_128 = DS_READ2_B64 [[COPY]], 0, 1, 0, implicit $m0, implicit $exec :: (load (<2 x s64>), align 8, addrspace 3)
177     ; GFX7-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_]]
178     ; GFX9-LABEL: name: load_local_v2s64
179     ; GFX9: liveins: $vgpr0
180     ; GFX9-NEXT: {{  $}}
181     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
182     ; GFX9-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (<2 x s64>), align 8, addrspace 3)
183     ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]]
184     ; GFX10-LABEL: name: load_local_v2s64
185     ; GFX10: liveins: $vgpr0
186     ; GFX10-NEXT: {{  $}}
187     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
188     ; GFX10-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (<2 x s64>), align 8, addrspace 3)
189     ; GFX10-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]]
190     %0:vgpr(p3) = COPY $vgpr0
191     %1:vgpr(<2 x s64>) = G_LOAD %0 :: (load (<2 x s64>), align 8, addrspace 3)
192     $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1
198 name: load_local_v2p1
199 legalized:       true
200 regBankSelected: true
201 tracksRegLiveness: true
203 body: |
204   bb.0:
205     liveins:  $vgpr0
207     ; GFX7-LABEL: name: load_local_v2p1
208     ; GFX7: liveins: $vgpr0
209     ; GFX7-NEXT: {{  $}}
210     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
211     ; GFX7-NEXT: $m0 = S_MOV_B32 -1
212     ; GFX7-NEXT: [[LOAD:%[0-9]+]]:vreg_128(<2 x p1>) = G_LOAD [[COPY]](p3) :: (load (<2 x p1>), align 8, addrspace 3)
213     ; GFX7-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[LOAD]](<2 x p1>)
214     ; GFX9-LABEL: name: load_local_v2p1
215     ; GFX9: liveins: $vgpr0
216     ; GFX9-NEXT: {{  $}}
217     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
218     ; GFX9-NEXT: [[LOAD:%[0-9]+]]:vreg_128(<2 x p1>) = G_LOAD [[COPY]](p3) :: (load (<2 x p1>), align 8, addrspace 3)
219     ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[LOAD]](<2 x p1>)
220     ; GFX10-LABEL: name: load_local_v2p1
221     ; GFX10: liveins: $vgpr0
222     ; GFX10-NEXT: {{  $}}
223     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
224     ; GFX10-NEXT: [[LOAD:%[0-9]+]]:vreg_128(<2 x p1>) = G_LOAD [[COPY]](p3) :: (load (<2 x p1>), align 8, addrspace 3)
225     ; GFX10-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[LOAD]](<2 x p1>)
226     %0:vgpr(p3) = COPY $vgpr0
227     %1:vgpr(<2 x p1>) = G_LOAD %0 :: (load (<2 x p1>), align 8, addrspace 3)
228     $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1
234 name: load_local_s128
235 legalized:       true
236 regBankSelected: true
237 tracksRegLiveness: true
239 body: |
240   bb.0:
241     liveins:  $vgpr0
243     ; GFX7-LABEL: name: load_local_s128
244     ; GFX7: liveins: $vgpr0
245     ; GFX7-NEXT: {{  $}}
246     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
247     ; GFX7-NEXT: $m0 = S_MOV_B32 -1
248     ; GFX7-NEXT: [[LOAD:%[0-9]+]]:vreg_128(s128) = G_LOAD [[COPY]](p3) :: (load (s128), align 8, addrspace 3)
249     ; GFX7-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[LOAD]](s128)
250     ; GFX9-LABEL: name: load_local_s128
251     ; GFX9: liveins: $vgpr0
252     ; GFX9-NEXT: {{  $}}
253     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
254     ; GFX9-NEXT: [[LOAD:%[0-9]+]]:vreg_128(s128) = G_LOAD [[COPY]](p3) :: (load (s128), align 8, addrspace 3)
255     ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[LOAD]](s128)
256     ; GFX10-LABEL: name: load_local_s128
257     ; GFX10: liveins: $vgpr0
258     ; GFX10-NEXT: {{  $}}
259     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
260     ; GFX10-NEXT: [[LOAD:%[0-9]+]]:vreg_128(s128) = G_LOAD [[COPY]](p3) :: (load (s128), align 8, addrspace 3)
261     ; GFX10-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[LOAD]](s128)
262     %0:vgpr(p3) = COPY $vgpr0
263     %1:vgpr(s128) = G_LOAD %0 :: (load (s128), align 8, addrspace 3)
264     $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1
270 name: load_local_v8s16
271 legalized:       true
272 regBankSelected: true
273 tracksRegLiveness: true
275 body: |
276   bb.0:
277     liveins:  $vgpr0
279     ; GFX7-LABEL: name: load_local_v8s16
280     ; GFX7: liveins: $vgpr0
281     ; GFX7-NEXT: {{  $}}
282     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
283     ; GFX7-NEXT: $m0 = S_MOV_B32 -1
284     ; GFX7-NEXT: [[DS_READ2_B64_:%[0-9]+]]:vreg_128 = DS_READ2_B64 [[COPY]], 0, 1, 0, implicit $m0, implicit $exec :: (load (<8 x s16>), align 8, addrspace 3)
285     ; GFX7-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_]]
286     ; GFX9-LABEL: name: load_local_v8s16
287     ; GFX9: liveins: $vgpr0
288     ; GFX9-NEXT: {{  $}}
289     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
290     ; GFX9-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (<8 x s16>), align 8, addrspace 3)
291     ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]]
292     ; GFX10-LABEL: name: load_local_v8s16
293     ; GFX10: liveins: $vgpr0
294     ; GFX10-NEXT: {{  $}}
295     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
296     ; GFX10-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (<8 x s16>), align 8, addrspace 3)
297     ; GFX10-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]]
298     %0:vgpr(p3) = COPY $vgpr0
299     %1:vgpr(<8 x s16>) = G_LOAD %0 :: (load (<8 x s16>), align 8, addrspace 3)
300     $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1