[AMDGPU] Make v8i16/v8f16 legal
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / combine-shl-from-extend-narrow.postlegal.mir
blobca498f5c0b7f49c502715bb7dff846363efdf8ff
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti -run-pass=amdgpu-postlegalizer-combiner -verify-machineinstrs %s -o - | FileCheck -check-prefix=GFX6  %s
3 # RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 -run-pass=amdgpu-postlegalizer-combiner -verify-machineinstrs %s -o - | FileCheck -check-prefix=GFX9  %s
5 # Can't narrow this; need known bits
6 ---
7 name: shl_s64_by_2_from_anyext_s32
8 tracksRegLiveness: true
9 legalized: true
10 body:             |
11   bb.0:
12     liveins: $vgpr0
14     ; GFX6-LABEL: name: shl_s64_by_2_from_anyext_s32
15     ; GFX6: liveins: $vgpr0
16     ; GFX6: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
17     ; GFX6: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[COPY]](s32)
18     ; GFX6: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
19     ; GFX6: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[ANYEXT]], [[C]](s32)
20     ; GFX6: $vgpr0_vgpr1 = COPY [[SHL]](s64)
21     ; GFX9-LABEL: name: shl_s64_by_2_from_anyext_s32
22     ; GFX9: liveins: $vgpr0
23     ; GFX9: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
24     ; GFX9: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[COPY]](s32)
25     ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
26     ; GFX9: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[ANYEXT]], [[C]](s32)
27     ; GFX9: $vgpr0_vgpr1 = COPY [[SHL]](s64)
28     %0:_(s32) = COPY $vgpr0
29     %1:_(s64) = G_ANYEXT %0
30     %2:_(s32) = G_CONSTANT i32 2
31     %3:_(s64) = G_SHL %1, %2
32     $vgpr0_vgpr1 = COPY %3
33 ...
35 # Can't narrow this; need known bits
36 ---
37 name: shl_s64_by_2_from_sext_s32
38 tracksRegLiveness: true
39 legalized: true
40 body:             |
41   bb.0:
42     liveins: $vgpr0
44     ; GFX6-LABEL: name: shl_s64_by_2_from_sext_s32
45     ; GFX6: liveins: $vgpr0
46     ; GFX6: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
47     ; GFX6: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY]](s32)
48     ; GFX6: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
49     ; GFX6: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[SEXT]], [[C]](s32)
50     ; GFX6: $vgpr0_vgpr1 = COPY [[SHL]](s64)
51     ; GFX9-LABEL: name: shl_s64_by_2_from_sext_s32
52     ; GFX9: liveins: $vgpr0
53     ; GFX9: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
54     ; GFX9: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY]](s32)
55     ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
56     ; GFX9: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[SEXT]], [[C]](s32)
57     ; GFX9: $vgpr0_vgpr1 = COPY [[SHL]](s64)
58     %0:_(s32) = COPY $vgpr0
59     %1:_(s64) = G_SEXT %0
60     %2:_(s32) = G_CONSTANT i32 2
61     %3:_(s64) = G_SHL %1, %2
62     $vgpr0_vgpr1 = COPY %3
63 ...
65 # Can't narrow this; need known bits
66 ---
67 name: shl_s64_by_2_from_zext_s32
68 tracksRegLiveness: true
69 legalized: true
70 body:             |
71   bb.0:
72     liveins: $vgpr0
74     ; GFX6-LABEL: name: shl_s64_by_2_from_zext_s32
75     ; GFX6: liveins: $vgpr0
76     ; GFX6: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
77     ; GFX6: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY]](s32)
78     ; GFX6: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
79     ; GFX6: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[ZEXT]], [[C]](s32)
80     ; GFX6: $vgpr0_vgpr1 = COPY [[SHL]](s64)
81     ; GFX9-LABEL: name: shl_s64_by_2_from_zext_s32
82     ; GFX9: liveins: $vgpr0
83     ; GFX9: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
84     ; GFX9: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY]](s32)
85     ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
86     ; GFX9: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[ZEXT]], [[C]](s32)
87     ; GFX9: $vgpr0_vgpr1 = COPY [[SHL]](s64)
88     %0:_(s32) = COPY $vgpr0
89     %1:_(s64) = G_ZEXT %0
90     %2:_(s32) = G_CONSTANT i32 2
91     %3:_(s64) = G_SHL %1, %2
92     $vgpr0_vgpr1 = COPY %3
93 ...
95 ---
96 name: narrow_shl_s64_by_2_from_anyext_s32
97 tracksRegLiveness: true
98 legalized: true
99 body:             |
100   bb.0:
101     liveins: $vgpr0
103     ; GFX6-LABEL: name: narrow_shl_s64_by_2_from_anyext_s32
104     ; GFX6: liveins: $vgpr0
105     ; GFX6: %narrow:_(s32) = COPY $vgpr0
106     ; GFX6: %masklow30:_(s32) = G_CONSTANT i32 1073741823
107     ; GFX6: %masked:_(s32) = G_AND %narrow, %masklow30
108     ; GFX6: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
109     ; GFX6: [[SHL:%[0-9]+]]:_(s32) = G_SHL %masked, [[C]](s32)
110     ; GFX6: %shl:_(s64) = G_ZEXT [[SHL]](s32)
111     ; GFX6: $vgpr0_vgpr1 = COPY %shl(s64)
112     ; GFX9-LABEL: name: narrow_shl_s64_by_2_from_anyext_s32
113     ; GFX9: liveins: $vgpr0
114     ; GFX9: %narrow:_(s32) = COPY $vgpr0
115     ; GFX9: %masklow30:_(s32) = G_CONSTANT i32 1073741823
116     ; GFX9: %masked:_(s32) = G_AND %narrow, %masklow30
117     ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
118     ; GFX9: [[SHL:%[0-9]+]]:_(s32) = G_SHL %masked, [[C]](s32)
119     ; GFX9: %shl:_(s64) = G_ZEXT [[SHL]](s32)
120     ; GFX9: $vgpr0_vgpr1 = COPY %shl(s64)
121     %narrow:_(s32) = COPY $vgpr0
122     %masklow30:_(s32) = G_CONSTANT i32 1073741823
123     %masked:_(s32) = G_AND %narrow, %masklow30
124     %extend:_(s64) = G_ANYEXT %masked
125     %shiftamt:_(s32) = G_CONSTANT i32 2
126     %shl:_(s64) = G_SHL %extend, %shiftamt
127     $vgpr0_vgpr1 = COPY %shl
131 name: narrow_shl_s64_by_2_from_zext_s32
132 tracksRegLiveness: true
133 legalized: true
134 body:             |
135   bb.0:
136     liveins: $vgpr0
138     ; GFX6-LABEL: name: narrow_shl_s64_by_2_from_zext_s32
139     ; GFX6: liveins: $vgpr0
140     ; GFX6: %narrow:_(s32) = COPY $vgpr0
141     ; GFX6: %masklow30:_(s32) = G_CONSTANT i32 1073741823
142     ; GFX6: %masked:_(s32) = G_AND %narrow, %masklow30
143     ; GFX6: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
144     ; GFX6: [[SHL:%[0-9]+]]:_(s32) = G_SHL %masked, [[C]](s32)
145     ; GFX6: %shl:_(s64) = G_ZEXT [[SHL]](s32)
146     ; GFX6: $vgpr0_vgpr1 = COPY %shl(s64)
147     ; GFX9-LABEL: name: narrow_shl_s64_by_2_from_zext_s32
148     ; GFX9: liveins: $vgpr0
149     ; GFX9: %narrow:_(s32) = COPY $vgpr0
150     ; GFX9: %masklow30:_(s32) = G_CONSTANT i32 1073741823
151     ; GFX9: %masked:_(s32) = G_AND %narrow, %masklow30
152     ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
153     ; GFX9: [[SHL:%[0-9]+]]:_(s32) = G_SHL %masked, [[C]](s32)
154     ; GFX9: %shl:_(s64) = G_ZEXT [[SHL]](s32)
155     ; GFX9: $vgpr0_vgpr1 = COPY %shl(s64)
156     %narrow:_(s32) = COPY $vgpr0
157     %masklow30:_(s32) = G_CONSTANT i32 1073741823
158     %masked:_(s32) = G_AND %narrow, %masklow30
159     %extend:_(s64) = G_ZEXT %masked
160     %shiftamt:_(s32) = G_CONSTANT i32 2
161     %shl:_(s64) = G_SHL %extend, %shiftamt
162     $vgpr0_vgpr1 = COPY %shl
166 name: narrow_shl_s64_by_2_from_sext_s32
167 tracksRegLiveness: true
168 legalized: true
169 body:             |
170   bb.0:
171     liveins: $vgpr0
173     ; GFX6-LABEL: name: narrow_shl_s64_by_2_from_sext_s32
174     ; GFX6: liveins: $vgpr0
175     ; GFX6: %narrow:_(s32) = COPY $vgpr0
176     ; GFX6: %masklow30:_(s32) = G_CONSTANT i32 1073741823
177     ; GFX6: %masked:_(s32) = G_AND %narrow, %masklow30
178     ; GFX6: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
179     ; GFX6: [[SHL:%[0-9]+]]:_(s32) = G_SHL %masked, [[C]](s32)
180     ; GFX6: %shl:_(s64) = G_ZEXT [[SHL]](s32)
181     ; GFX6: $vgpr0_vgpr1 = COPY %shl(s64)
182     ; GFX9-LABEL: name: narrow_shl_s64_by_2_from_sext_s32
183     ; GFX9: liveins: $vgpr0
184     ; GFX9: %narrow:_(s32) = COPY $vgpr0
185     ; GFX9: %masklow30:_(s32) = G_CONSTANT i32 1073741823
186     ; GFX9: %masked:_(s32) = G_AND %narrow, %masklow30
187     ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
188     ; GFX9: [[SHL:%[0-9]+]]:_(s32) = G_SHL %masked, [[C]](s32)
189     ; GFX9: %shl:_(s64) = G_ZEXT [[SHL]](s32)
190     ; GFX9: $vgpr0_vgpr1 = COPY %shl(s64)
191     %narrow:_(s32) = COPY $vgpr0
192     %masklow30:_(s32) = G_CONSTANT i32 1073741823
193     %masked:_(s32) = G_AND %narrow, %masklow30
194     %extend:_(s64) = G_SEXT %masked
195     %shiftamt:_(s32) = G_CONSTANT i32 2
196     %shl:_(s64) = G_SHL %extend, %shiftamt
197     $vgpr0_vgpr1 = COPY %shl
201 name: narrow_shl_s64_by_2_from_zext_s32_lookthrough_amount
202 tracksRegLiveness: true
203 legalized: true
204 body:             |
205   bb.0:
206     liveins: $vgpr0
208     ; GFX6-LABEL: name: narrow_shl_s64_by_2_from_zext_s32_lookthrough_amount
209     ; GFX6: liveins: $vgpr0
210     ; GFX6: %narrow:_(s32) = COPY $vgpr0
211     ; GFX6: %masklow30:_(s32) = G_CONSTANT i32 1073741823
212     ; GFX6: %masked:_(s32) = G_AND %narrow, %masklow30
213     ; GFX6: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
214     ; GFX6: [[SHL:%[0-9]+]]:_(s32) = G_SHL %masked, [[C]](s32)
215     ; GFX6: %shl:_(s64) = G_ZEXT [[SHL]](s32)
216     ; GFX6: $vgpr0_vgpr1 = COPY %shl(s64)
217     ; GFX9-LABEL: name: narrow_shl_s64_by_2_from_zext_s32_lookthrough_amount
218     ; GFX9: liveins: $vgpr0
219     ; GFX9: %narrow:_(s32) = COPY $vgpr0
220     ; GFX9: %masklow30:_(s32) = G_CONSTANT i32 1073741823
221     ; GFX9: %masked:_(s32) = G_AND %narrow, %masklow30
222     ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
223     ; GFX9: [[SHL:%[0-9]+]]:_(s32) = G_SHL %masked, [[C]](s32)
224     ; GFX9: %shl:_(s64) = G_ZEXT [[SHL]](s32)
225     ; GFX9: $vgpr0_vgpr1 = COPY %shl(s64)
226     %narrow:_(s32) = COPY $vgpr0
227     %masklow30:_(s32) = G_CONSTANT i32 1073741823
228     %masked:_(s32) = G_AND %narrow, %masklow30
229     %extend:_(s64) = G_ZEXT %masked
230     %shiftamt64:_(s64) = G_CONSTANT i64 2
231     %shiftamt:_(s32) = G_TRUNC %shiftamt64
232     %shl:_(s64) = G_SHL %extend, %shiftamt
233     $vgpr0_vgpr1 = COPY %shl
236 # Can't introduce a 16-bit shift before gfx8
238 name: narrow_shl_s32_by_2_from_zext_s16
239 tracksRegLiveness: true
240 legalized: true
241 body:             |
242   bb.0:
243     liveins: $vgpr0
245     ; GFX6-LABEL: name: narrow_shl_s32_by_2_from_zext_s16
246     ; GFX6: liveins: $vgpr0
247     ; GFX6: %argument:_(s32) = COPY $vgpr0
248     ; GFX6: %narrow:_(s16) = G_TRUNC %argument(s32)
249     ; GFX6: %masklow14:_(s16) = G_CONSTANT i16 16383
250     ; GFX6: %masked:_(s16) = G_AND %narrow, %masklow14
251     ; GFX6: %extend:_(s32) = G_ZEXT %masked(s16)
252     ; GFX6: %shiftamt:_(s32) = G_CONSTANT i32 2
253     ; GFX6: %shl:_(s32) = G_SHL %extend, %shiftamt(s32)
254     ; GFX6: $vgpr0 = COPY %shl(s32)
255     ; GFX9-LABEL: name: narrow_shl_s32_by_2_from_zext_s16
256     ; GFX9: liveins: $vgpr0
257     ; GFX9: %argument:_(s32) = COPY $vgpr0
258     ; GFX9: %narrow:_(s16) = G_TRUNC %argument(s32)
259     ; GFX9: %masklow14:_(s16) = G_CONSTANT i16 16383
260     ; GFX9: %masked:_(s16) = G_AND %narrow, %masklow14
261     ; GFX9: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 2
262     ; GFX9: [[SHL:%[0-9]+]]:_(s16) = G_SHL %masked, [[C]](s16)
263     ; GFX9: %shl:_(s32) = G_ZEXT [[SHL]](s16)
264     ; GFX9: $vgpr0 = COPY %shl(s32)
265     %argument:_(s32) = COPY $vgpr0
266     %narrow:_(s16) = G_TRUNC %argument
267     %masklow14:_(s16) = G_CONSTANT i16 16383
268     %masked:_(s16) = G_AND %narrow, %masklow14
269     %extend:_(s32) = G_ZEXT %masked
270     %shiftamt:_(s32) = G_CONSTANT i32 2
271     %shl:_(s32) = G_SHL %extend, %shiftamt
272     $vgpr0 = COPY %shl
276 name: narrow_shl_s64_by_2_from_zext_s16
277 tracksRegLiveness: true
278 legalized: true
279 body:             |
280   bb.0:
281     liveins: $vgpr0
283     ; GFX6-LABEL: name: narrow_shl_s64_by_2_from_zext_s16
284     ; GFX6: liveins: $vgpr0
285     ; GFX6: %argument:_(s32) = COPY $vgpr0
286     ; GFX6: %narrow:_(s16) = G_TRUNC %argument(s32)
287     ; GFX6: %masklow14:_(s16) = G_CONSTANT i16 16383
288     ; GFX6: %masked:_(s16) = G_AND %narrow, %masklow14
289     ; GFX6: %extend:_(s64) = G_ZEXT %masked(s16)
290     ; GFX6: %shiftamt:_(s32) = G_CONSTANT i32 2
291     ; GFX6: %shl:_(s64) = G_SHL %extend, %shiftamt(s32)
292     ; GFX6: $vgpr0_vgpr1 = COPY %shl(s64)
293     ; GFX9-LABEL: name: narrow_shl_s64_by_2_from_zext_s16
294     ; GFX9: liveins: $vgpr0
295     ; GFX9: %argument:_(s32) = COPY $vgpr0
296     ; GFX9: %narrow:_(s16) = G_TRUNC %argument(s32)
297     ; GFX9: %masklow14:_(s16) = G_CONSTANT i16 16383
298     ; GFX9: %masked:_(s16) = G_AND %narrow, %masklow14
299     ; GFX9: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 2
300     ; GFX9: [[SHL:%[0-9]+]]:_(s16) = G_SHL %masked, [[C]](s16)
301     ; GFX9: %shl:_(s64) = G_ZEXT [[SHL]](s16)
302     ; GFX9: $vgpr0_vgpr1 = COPY %shl(s64)
303     %argument:_(s32) = COPY $vgpr0
304     %narrow:_(s16) = G_TRUNC %argument
305     %masklow14:_(s16) = G_CONSTANT i16 16383
306     %masked:_(s16) = G_AND %narrow, %masklow14
307     %extend:_(s64) = G_ZEXT %masked
308     %shiftamt:_(s32) = G_CONSTANT i32 2
309     %shl:_(s64) = G_SHL %extend, %shiftamt
310     $vgpr0_vgpr1 = COPY %shl