Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / legalize-freeze.mir
blobc06df6312c9c5a46054af754a03eed0999bb2e1e
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -O0 -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti -run-pass=legalizer -allow-ginsert-as-artifact=0 -global-isel-abort=0 %s -o - | FileCheck %s
3 # RUN: llc -O0 -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -run-pass=legalizer -allow-ginsert-as-artifact=0 -global-isel-abort=0 %s -o - | FileCheck %s
5 ---
6 name: test_freeze_s1
7 body: |
8   bb.0:
10     ; CHECK-LABEL: name: test_freeze_s1
11     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
12     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY]](s32)
13     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s1) = G_FREEZE [[TRUNC]]
14     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FREEZE]](s1)
15     ; CHECK-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)
16     %0:_(s32) = COPY $vgpr0
17     %1:_(s1) = G_TRUNC %0
18     %2:_(s1) = G_FREEZE %1
19     %3:_(s32) = G_ANYEXT %2
20     $vgpr0 = COPY %3
21 ...
23 ---
24 name: test_freeze_s7
25 body: |
26   bb.0:
28     ; CHECK-LABEL: name: test_freeze_s7
29     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
30     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s32) = G_FREEZE [[COPY]]
31     ; CHECK-NEXT: $vgpr0 = COPY [[FREEZE]](s32)
32     %0:_(s32) = COPY $vgpr0
33     %1:_(s7) = G_TRUNC %0
34     %2:_(s7) = G_FREEZE %1
35     %3:_(s32) = G_ANYEXT %2
36     $vgpr0 = COPY %3
37 ...
39 ---
40 name: test_freeze_s8
41 body: |
42   bb.0:
44     ; CHECK-LABEL: name: test_freeze_s8
45     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
46     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s32) = G_FREEZE [[COPY]]
47     ; CHECK-NEXT: $vgpr0 = COPY [[FREEZE]](s32)
48     %0:_(s32) = COPY $vgpr0
49     %1:_(s8) = G_TRUNC %0
50     %2:_(s8) = G_FREEZE %1
51     %3:_(s32) = G_ANYEXT %2
52     $vgpr0 = COPY %3
53 ...
55 ---
56 name: test_freeze_s16
57 body: |
58   bb.0:
60     ; CHECK-LABEL: name: test_freeze_s16
61     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
62     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
63     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s16) = G_FREEZE [[TRUNC]]
64     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FREEZE]](s16)
65     ; CHECK-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)
66     %0:_(s32) = COPY $vgpr0
67     %1:_(s16) = G_TRUNC %0
68     %2:_(s16) = G_FREEZE %1
69     %3:_(s32) = G_ANYEXT %2
70     $vgpr0 = COPY %3
71 ...
73 ---
74 name: test_freeze_s32
75 body: |
76   bb.0:
78     ; CHECK-LABEL: name: test_freeze_s32
79     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
80     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s32) = G_FREEZE [[COPY]]
81     ; CHECK-NEXT: $vgpr0 = COPY [[FREEZE]](s32)
82     %0:_(s32) = COPY $vgpr0
83     %1:_(s32) = G_FREEZE %0
84     $vgpr0 = COPY %1
85 ...
87 ---
88 name: test_freeze_s48
89 body: |
90   bb.0:
92     ; CHECK-LABEL: name: test_freeze_s48
93     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
94     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s64) = G_FREEZE [[COPY]]
95     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[FREEZE]](s64)
96     %0:_(s64) = COPY $vgpr0_vgpr1
97     %1:_(s48) = G_TRUNC %0
98     %2:_(s48) = G_FREEZE %1
99     %3:_(s64) = G_ANYEXT %2
100     $vgpr0_vgpr1 = COPY %3
104 name: test_freeze_s64
105 body: |
106   bb.0:
108     ; CHECK-LABEL: name: test_freeze_s64
109     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
110     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s64) = G_FREEZE [[COPY]]
111     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[FREEZE]](s64)
112     %0:_(s64) = COPY $vgpr0_vgpr1
113     %1:_(s64) = G_FREEZE %0
114     $vgpr0_vgpr1 = COPY %1
118 name: test_freeze_s65
119 body: |
120   bb.0:
122     ; CHECK-LABEL: name: test_freeze_s65
123     ; CHECK: [[COPY:%[0-9]+]]:_(s96) = COPY $vgpr0_vgpr1_vgpr2
124     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s96)
125     ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
126     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV]](s32), [[UV1]](s32)
127     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV2]](s32), [[DEF]](s32)
128     ; CHECK-NEXT: [[MV2:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[MV]](s64), [[MV1]](s64)
129     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s128) = G_FREEZE [[MV2]]
130     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s96) = G_TRUNC [[FREEZE]](s128)
131     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2 = COPY [[TRUNC]](s96)
132     %0:_(s96) = COPY $vgpr0_vgpr1_vgpr2
133     %1:_(s65) = G_TRUNC %0
134     %2:_(s65) = G_FREEZE %1
135     %3:_(s96) = G_ANYEXT %2
136     $vgpr0_vgpr1_vgpr2 = COPY %3
140 name: test_freeze_s128
141 body: |
142   bb.0:
144     ; CHECK-LABEL: name: test_freeze_s128
145     ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
146     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s128) = G_FREEZE [[COPY]]
147     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[FREEZE]](s128)
148     %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
149     %1:_(s128) = G_FREEZE %0
150     $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1
154 name: test_freeze_256
155 body: |
156   bb.0:
158     ; CHECK-LABEL: name: test_freeze_256
159     ; CHECK: [[COPY:%[0-9]+]]:_(s256) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
160     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s256) = G_FREEZE [[COPY]]
161     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY [[FREEZE]](s256)
162     %0:_(s256) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
163     %1:_(s256) = G_FREEZE %0
164     $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY %1
168 name: test_freeze_s448
169 body: |
170   bb.0:
172     ; CHECK-LABEL: name: test_freeze_s448
173     ; CHECK: [[COPY:%[0-9]+]]:_(s512) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
174     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s448) = G_TRUNC [[COPY]](s512)
175     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s448) = G_FREEZE [[TRUNC]]
176     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64), [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64), [[UV4:%[0-9]+]]:_(s64), [[UV5:%[0-9]+]]:_(s64), [[UV6:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[FREEZE]](s448)
177     ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
178     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s512) = G_MERGE_VALUES [[UV]](s64), [[UV1]](s64), [[UV2]](s64), [[UV3]](s64), [[UV4]](s64), [[UV5]](s64), [[UV6]](s64), [[DEF]](s64)
179     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY [[MV]](s512)
180     %0:_(s512) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
181     %1:_(s448) = G_TRUNC %0
182     %2:_(s448) = G_FREEZE %1
183     %3:_(s512) = G_ANYEXT %2
184     $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY %3
188 name: test_freeze_s512
189 body: |
190   bb.0:
192     ; CHECK-LABEL: name: test_freeze_s512
193     ; CHECK: [[COPY:%[0-9]+]]:_(s512) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
194     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s512) = G_FREEZE [[COPY]]
195     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY [[FREEZE]](s512)
196     %0:_(s512) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
197     %1:_(s512) = G_FREEZE %0
198     $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY %1
202 name: test_freeze_s1024
203 body: |
204   bb.0:
206     ; CHECK-LABEL: name: test_freeze_s1024
207     ; CHECK: [[COPY:%[0-9]+]]:_(s512) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
208     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64), [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64), [[UV4:%[0-9]+]]:_(s64), [[UV5:%[0-9]+]]:_(s64), [[UV6:%[0-9]+]]:_(s64), [[UV7:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](s512)
209     ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
210     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s1024) = G_MERGE_VALUES [[UV]](s64), [[UV1]](s64), [[UV2]](s64), [[UV3]](s64), [[UV4]](s64), [[UV5]](s64), [[UV6]](s64), [[UV7]](s64), [[DEF]](s64), [[DEF]](s64), [[DEF]](s64), [[DEF]](s64), [[DEF]](s64), [[DEF]](s64), [[DEF]](s64), [[DEF]](s64)
211     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s1024) = G_FREEZE [[MV]]
212     ; CHECK-NEXT: S_NOP 0, implicit [[FREEZE]](s1024)
213     %0:_(s512) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
214     %1:_(s1024) = G_ANYEXT %0
215     %2:_(s1024) = G_FREEZE %1
216     S_NOP 0, implicit %2
220 name: test_freeze_s1056
221 body: |
222   bb.0:
224     ; CHECK-LABEL: name: test_freeze_s1056
225     ; CHECK: [[COPY:%[0-9]+]]:_(s512) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
226     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s1056) = G_ANYEXT [[COPY]](s512)
227     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s1056) = G_FREEZE [[ANYEXT]]
228     ; CHECK-NEXT: S_NOP 0, implicit [[FREEZE]](s1056)
229     %0:_(s512) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
230     %1:_(s1056) = G_ANYEXT %0
231     %2:_(s1056) = G_FREEZE %1
232     S_NOP 0, implicit %2
236 name: test_freeze_s2048
237 body: |
238   bb.0:
240     ; CHECK-LABEL: name: test_freeze_s2048
241     ; CHECK: [[COPY:%[0-9]+]]:_(s512) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
242     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64), [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64), [[UV4:%[0-9]+]]:_(s64), [[UV5:%[0-9]+]]:_(s64), [[UV6:%[0-9]+]]:_(s64), [[UV7:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](s512)
243     ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
244     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s1024) = G_MERGE_VALUES [[UV]](s64), [[UV1]](s64), [[UV2]](s64), [[UV3]](s64), [[UV4]](s64), [[UV5]](s64), [[UV6]](s64), [[UV7]](s64), [[DEF]](s64), [[DEF]](s64), [[DEF]](s64), [[DEF]](s64), [[DEF]](s64), [[DEF]](s64), [[DEF]](s64), [[DEF]](s64)
245     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s1024) = G_MERGE_VALUES [[DEF]](s64), [[DEF]](s64), [[DEF]](s64), [[DEF]](s64), [[DEF]](s64), [[DEF]](s64), [[DEF]](s64), [[DEF]](s64), [[DEF]](s64), [[DEF]](s64), [[DEF]](s64), [[DEF]](s64), [[DEF]](s64), [[DEF]](s64), [[DEF]](s64), [[DEF]](s64)
246     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s1024) = G_FREEZE [[MV]]
247     ; CHECK-NEXT: [[FREEZE1:%[0-9]+]]:_(s1024) = G_FREEZE [[MV1]]
248     ; CHECK-NEXT: [[MV2:%[0-9]+]]:_(s2048) = G_MERGE_VALUES [[FREEZE]](s1024), [[FREEZE1]](s1024)
249     ; CHECK-NEXT: S_NOP 0, implicit [[MV2]](s2048)
250     %0:_(s512) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
251     %1:_(s2048) = G_ANYEXT %0
252     %2:_(s2048) = G_FREEZE %1
253     S_NOP 0, implicit %2
257 name: test_freeze_v2s32
258 body: |
259   bb.0:
261     ; CHECK-LABEL: name: test_freeze_v2s32
262     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
263     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<2 x s32>) = G_FREEZE [[COPY]]
264     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[FREEZE]](<2 x s32>)
265     %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
266     %1:_(<2 x s32>) = G_FREEZE %0
267     $vgpr0_vgpr1 = COPY %1
271 name: test_freeze_v3s32
272 body: |
273   bb.0:
275     ; CHECK-LABEL: name: test_freeze_v3s32
276     ; CHECK: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
277     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<3 x s32>) = G_FREEZE [[COPY]]
278     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2 = COPY [[FREEZE]](<3 x s32>)
279     %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
280     %1:_(<3 x s32>) = G_FREEZE %0
281     $vgpr0_vgpr1_vgpr2 = COPY %1
285 name: test_freeze_v4s32
286 body: |
287   bb.0:
289     ; CHECK-LABEL: name: test_freeze_v4s32
290     ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
291     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<4 x s32>) = G_FREEZE [[COPY]]
292     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[FREEZE]](<4 x s32>)
293     %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
294     %1:_(<4 x s32>) = G_FREEZE %0
295     $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1
299 name: test_freeze_v5s32
300 body: |
301   bb.0:
303     ; CHECK-LABEL: name: test_freeze_v5s32
304     ; CHECK: [[COPY:%[0-9]+]]:_(<5 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4
305     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<5 x s32>) = G_FREEZE [[COPY]]
306     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4 = COPY [[FREEZE]](<5 x s32>)
307     %0:_(<5 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4
308     %1:_(<5 x s32>) = G_FREEZE %0
309     $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4 = COPY %1
313 name: test_freeze_v6s32
314 body: |
315   bb.0:
317     ; CHECK-LABEL: name: test_freeze_v6s32
318     ; CHECK: [[DEF:%[0-9]+]]:_(<6 x s32>) = G_IMPLICIT_DEF
319     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<6 x s32>) = G_FREEZE [[DEF]]
320     ; CHECK-NEXT: S_NOP 0, implicit [[FREEZE]](<6 x s32>)
321     %0:_(<6 x s32>) = G_IMPLICIT_DEF
322     %1:_(<6 x s32>) = G_FREEZE %0
323     S_NOP 0, implicit %1
327 name: test_freeze_v7s32
328 body: |
329   bb.0:
331     ; CHECK-LABEL: name: test_freeze_v7s32
332     ; CHECK: [[DEF:%[0-9]+]]:_(<7 x s32>) = G_IMPLICIT_DEF
333     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<7 x s32>) = G_FREEZE [[DEF]]
334     ; CHECK-NEXT: S_NOP 0, implicit [[FREEZE]](<7 x s32>)
335     %0:_(<7 x s32>) = G_IMPLICIT_DEF
336     %1:_(<7 x s32>) = G_FREEZE %0
337     S_NOP 0, implicit %1
341 name: test_freeze_v8s32
342 body: |
343   bb.0:
345     ; CHECK-LABEL: name: test_freeze_v8s32
346     ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
347     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<8 x s32>) = G_FREEZE [[COPY]]
348     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY [[FREEZE]](<8 x s32>)
349     %0:_(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
350     %1:_(<8 x s32>) = G_FREEZE %0
351     $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY %1
355 name: test_freeze_v16s32
356 body: |
357   bb.0:
359     ; CHECK-LABEL: name: test_freeze_v16s32
360     ; CHECK: [[COPY:%[0-9]+]]:_(<16 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
361     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<16 x s32>) = G_FREEZE [[COPY]]
362     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY [[FREEZE]](<16 x s32>)
363     %0:_(<16 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
364     %1:_(<16 x s32>) = G_FREEZE %0
365     $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY %1
369 name: test_freeze_v17s32
370 body: |
371   bb.0:
373     ; CHECK-LABEL: name: test_freeze_v17s32
374     ; CHECK: [[COPY:%[0-9]+]]:_(<16 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
375     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<16 x s32>) = G_FREEZE [[COPY]]
376     ; CHECK-NEXT: S_NOP 0, implicit [[FREEZE]](<16 x s32>)
377     %0:_(<16 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
378     %1:_(<16 x s32>) = G_FREEZE %0
379     S_NOP 0, implicit %1
383 name: test_freeze_v32s32
384 body: |
385   bb.0:
387     ; CHECK-LABEL: name: test_freeze_v32s32
388     ; CHECK: [[DEF:%[0-9]+]]:_(<32 x s32>) = G_IMPLICIT_DEF
389     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<32 x s32>) = G_FREEZE [[DEF]]
390     ; CHECK-NEXT: S_NOP 0, implicit [[FREEZE]](<32 x s32>)
391     %0:_(<32 x s32>) = G_IMPLICIT_DEF
392     %1:_(<32 x s32>) = G_FREEZE %0
393     S_NOP 0, implicit %1
397 name: test_freeze_v33s32
398 body: |
399   bb.0:
401     ; CHECK-LABEL: name: test_freeze_v33s32
402     ; CHECK: [[DEF:%[0-9]+]]:_(<16 x s32>) = G_IMPLICIT_DEF
403     ; CHECK-NEXT: [[DEF1:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
404     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<16 x s32>) = G_FREEZE [[DEF]]
405     ; CHECK-NEXT: [[FREEZE1:%[0-9]+]]:_(<16 x s32>) = G_FREEZE [[DEF]]
406     ; CHECK-NEXT: [[FREEZE2:%[0-9]+]]:_(s32) = G_FREEZE [[DEF1]]
407     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32), [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32), [[UV8:%[0-9]+]]:_(s32), [[UV9:%[0-9]+]]:_(s32), [[UV10:%[0-9]+]]:_(s32), [[UV11:%[0-9]+]]:_(s32), [[UV12:%[0-9]+]]:_(s32), [[UV13:%[0-9]+]]:_(s32), [[UV14:%[0-9]+]]:_(s32), [[UV15:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FREEZE]](<16 x s32>)
408     ; CHECK-NEXT: [[UV16:%[0-9]+]]:_(s32), [[UV17:%[0-9]+]]:_(s32), [[UV18:%[0-9]+]]:_(s32), [[UV19:%[0-9]+]]:_(s32), [[UV20:%[0-9]+]]:_(s32), [[UV21:%[0-9]+]]:_(s32), [[UV22:%[0-9]+]]:_(s32), [[UV23:%[0-9]+]]:_(s32), [[UV24:%[0-9]+]]:_(s32), [[UV25:%[0-9]+]]:_(s32), [[UV26:%[0-9]+]]:_(s32), [[UV27:%[0-9]+]]:_(s32), [[UV28:%[0-9]+]]:_(s32), [[UV29:%[0-9]+]]:_(s32), [[UV30:%[0-9]+]]:_(s32), [[UV31:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FREEZE1]](<16 x s32>)
409     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<33 x s32>) = G_BUILD_VECTOR [[UV]](s32), [[UV1]](s32), [[UV2]](s32), [[UV3]](s32), [[UV4]](s32), [[UV5]](s32), [[UV6]](s32), [[UV7]](s32), [[UV8]](s32), [[UV9]](s32), [[UV10]](s32), [[UV11]](s32), [[UV12]](s32), [[UV13]](s32), [[UV14]](s32), [[UV15]](s32), [[UV16]](s32), [[UV17]](s32), [[UV18]](s32), [[UV19]](s32), [[UV20]](s32), [[UV21]](s32), [[UV22]](s32), [[UV23]](s32), [[UV24]](s32), [[UV25]](s32), [[UV26]](s32), [[UV27]](s32), [[UV28]](s32), [[UV29]](s32), [[UV30]](s32), [[UV31]](s32), [[FREEZE2]](s32)
410     ; CHECK-NEXT: S_NOP 0, implicit [[BUILD_VECTOR]](<33 x s32>)
411     %0:_(<33 x s32>) = G_IMPLICIT_DEF
412     %1:_(<33 x s32>) = G_FREEZE %0
413     S_NOP 0, implicit %1
417 name: test_freeze_v64s32
418 body: |
419   bb.0:
421     ; CHECK-LABEL: name: test_freeze_v64s32
422     ; CHECK: [[DEF:%[0-9]+]]:_(<16 x s32>) = G_IMPLICIT_DEF
423     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<16 x s32>) = G_FREEZE [[DEF]]
424     ; CHECK-NEXT: [[FREEZE1:%[0-9]+]]:_(<16 x s32>) = G_FREEZE [[DEF]]
425     ; CHECK-NEXT: [[FREEZE2:%[0-9]+]]:_(<16 x s32>) = G_FREEZE [[DEF]]
426     ; CHECK-NEXT: [[FREEZE3:%[0-9]+]]:_(<16 x s32>) = G_FREEZE [[DEF]]
427     ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<64 x s32>) = G_CONCAT_VECTORS [[FREEZE]](<16 x s32>), [[FREEZE1]](<16 x s32>), [[FREEZE2]](<16 x s32>), [[FREEZE3]](<16 x s32>)
428     ; CHECK-NEXT: S_NOP 0, implicit [[CONCAT_VECTORS]](<64 x s32>)
429     %0:_(<64 x s32>) = G_IMPLICIT_DEF
430     %1:_(<64 x s32>) = G_FREEZE %0
431     S_NOP 0, implicit %1
435 name: test_freeze_v2s1
436 body: |
437   bb.0:
438     liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
440     ; CHECK-LABEL: name: test_freeze_v2s1
441     ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
442     ; CHECK-NEXT: {{  $}}
443     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
444     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3
445     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
446     ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
447     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV2]]
448     ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV3]]
449     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP]](s1)
450     ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP1]](s1)
451     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[ANYEXT]](s32), [[ANYEXT1]](s32)
452     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<2 x s32>) = G_FREEZE [[BUILD_VECTOR]]
453     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[FREEZE]](<2 x s32>)
454     %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
455     %1:_(<2 x s32>) = COPY $vgpr2_vgpr3
456     %2:_(<2 x s1>) = G_ICMP intpred(ne), %0, %1
457     %3:_(<2 x s1>) = G_FREEZE %2
458     %4:_(<2 x s32>) = G_ANYEXT %3
459     $vgpr0_vgpr1 = COPY %4
463 name: test_freeze_v3s1
464 body: |
465   bb.0:
466     liveins: $vgpr0_vgpr1_vgpr2, $vgpr3_vgpr4_vgpr5
468     ; CHECK-LABEL: name: test_freeze_v3s1
469     ; CHECK: liveins: $vgpr0_vgpr1_vgpr2, $vgpr3_vgpr4_vgpr5
470     ; CHECK-NEXT: {{  $}}
471     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
472     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr3_vgpr4_vgpr5
473     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<3 x s32>)
474     ; CHECK-NEXT: [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<3 x s32>)
475     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV3]]
476     ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV4]]
477     ; CHECK-NEXT: [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV2]](s32), [[UV5]]
478     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP]](s1)
479     ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP1]](s1)
480     ; CHECK-NEXT: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP2]](s1)
481     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[ANYEXT]](s32), [[ANYEXT1]](s32), [[ANYEXT2]](s32)
482     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<3 x s32>) = G_FREEZE [[BUILD_VECTOR]]
483     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2 = COPY [[FREEZE]](<3 x s32>)
484     %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
485     %1:_(<3 x s32>) = COPY $vgpr3_vgpr4_vgpr5
486     %2:_(<3 x s1>) = G_ICMP intpred(ne), %0, %1
487     %3:_(<3 x s1>) = G_FREEZE %2
488     %4:_(<3 x s32>) = G_ANYEXT %3
489     $vgpr0_vgpr1_vgpr2 = COPY %4
493 name: test_freeze_v2s8
494 body: |
495   bb.0:
497     ; CHECK-LABEL: name: test_freeze_v2s8
498     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
499     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<2 x s32>) = G_FREEZE [[COPY]]
500     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[FREEZE]](<2 x s32>)
501     %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
502     %1:_(<2 x s8>) = G_TRUNC %0
503     %2:_(<2 x s8>) = G_FREEZE %1
504     %3:_(<2 x s32>) = G_ANYEXT %2
505     $vgpr0_vgpr1 = COPY %3
509 name: test_freeze_v3s8
510 body: |
511   bb.0:
513     ; CHECK-LABEL: name: test_freeze_v3s8
514     ; CHECK: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
515     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<3 x s32>)
516     ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
517     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[UV]](s32), [[UV1]](s32), [[UV2]](s32), [[DEF]](s32)
518     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<4 x s32>) = G_FREEZE [[BUILD_VECTOR]]
519     ; CHECK-NEXT: [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32), [[UV6:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FREEZE]](<4 x s32>)
520     ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[UV3]](s32), [[UV4]](s32), [[UV5]](s32)
521     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2 = COPY [[BUILD_VECTOR1]](<3 x s32>)
522     %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
523     %1:_(<3 x s8>) = G_TRUNC %0
524     %2:_(<3 x s8>) = G_FREEZE %1
525     %3:_(<3 x s32>) = G_ANYEXT %2
526     $vgpr0_vgpr1_vgpr2 = COPY %3
530 name: test_freeze_v2s16
531 body: |
532   bb.0:
534     ; CHECK-LABEL: name: test_freeze_v2s16
535     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
536     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<2 x s16>) = G_FREEZE [[COPY]]
537     ; CHECK-NEXT: $vgpr0 = COPY [[FREEZE]](<2 x s16>)
538     %0:_(<2 x s16>) = COPY $vgpr0
539     %1:_(<2 x s16>) = G_FREEZE %0
540     $vgpr0 = COPY %1
544 name: test_freeze_v3s16
545 body: |
546   bb.0:
548     ; CHECK-LABEL: name: test_freeze_v3s16
549     ; CHECK: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
550     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<3 x s32>)
551     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
552     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[UV]], [[C]]
553     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[UV1]], [[C]]
554     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
555     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)
556     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
557     ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
558     ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[UV2]], [[C]]
559     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
560     ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[C2]], [[C1]](s32)
561     ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL1]]
562     ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32)
563     ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[BITCAST]](<2 x s16>), [[BITCAST1]](<2 x s16>)
564     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<4 x s16>) = G_FREEZE [[CONCAT_VECTORS]]
565     ; CHECK-NEXT: [[UV3:%[0-9]+]]:_(<2 x s16>), [[UV4:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[FREEZE]](<4 x s16>)
566     ; CHECK-NEXT: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[UV3]](<2 x s16>)
567     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST2]], [[C1]](s32)
568     ; CHECK-NEXT: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[UV4]](<2 x s16>)
569     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[BITCAST2]](s32), [[LSHR]](s32), [[BITCAST3]](s32)
570     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2 = COPY [[BUILD_VECTOR]](<3 x s32>)
571     %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
572     %1:_(<3 x s16>) = G_TRUNC %0
573     %2:_(<3 x s16>) = G_FREEZE %1
574     %3:_(<3 x s32>) = G_ANYEXT %2
575     $vgpr0_vgpr1_vgpr2 = COPY %3
579 name: test_freeze_v4s16
580 body: |
581   bb.0:
583     ; CHECK-LABEL: name: test_freeze_v4s16
584     ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1
585     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<4 x s16>) = G_FREEZE [[COPY]]
586     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[FREEZE]](<4 x s16>)
587     %0:_(<4 x s16>) = COPY $vgpr0_vgpr1
588     %1:_(<4 x s16>) = G_FREEZE %0
589     $vgpr0_vgpr1 = COPY %1
593 name: test_freeze_v5s16
594 body: |
595   bb.0:
597     ; CHECK-LABEL: name: test_freeze_v5s16
598     ; CHECK: [[COPY:%[0-9]+]]:_(<5 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4
599     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<5 x s32>)
600     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
601     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[UV]], [[C]]
602     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[UV1]], [[C]]
603     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
604     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)
605     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
606     ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
607     ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[UV2]], [[C]]
608     ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s32) = G_AND [[UV3]], [[C]]
609     ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[AND3]], [[C1]](s32)
610     ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL1]]
611     ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32)
612     ; CHECK-NEXT: [[AND4:%[0-9]+]]:_(s32) = G_AND [[UV4]], [[C]]
613     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
614     ; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[C2]], [[C1]](s32)
615     ; CHECK-NEXT: [[OR2:%[0-9]+]]:_(s32) = G_OR [[AND4]], [[SHL2]]
616     ; CHECK-NEXT: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR2]](s32)
617     ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[BITCAST]](<2 x s16>), [[BITCAST1]](<2 x s16>), [[BITCAST2]](<2 x s16>)
618     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<6 x s16>) = G_FREEZE [[CONCAT_VECTORS]]
619     ; CHECK-NEXT: [[UV5:%[0-9]+]]:_(<2 x s16>), [[UV6:%[0-9]+]]:_(<2 x s16>), [[UV7:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[FREEZE]](<6 x s16>)
620     ; CHECK-NEXT: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[UV5]](<2 x s16>)
621     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST3]], [[C1]](s32)
622     ; CHECK-NEXT: [[BITCAST4:%[0-9]+]]:_(s32) = G_BITCAST [[UV6]](<2 x s16>)
623     ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST4]], [[C1]](s32)
624     ; CHECK-NEXT: [[BITCAST5:%[0-9]+]]:_(s32) = G_BITCAST [[UV7]](<2 x s16>)
625     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<5 x s32>) = G_BUILD_VECTOR [[BITCAST3]](s32), [[LSHR]](s32), [[BITCAST4]](s32), [[LSHR1]](s32), [[BITCAST5]](s32)
626     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4 = COPY [[BUILD_VECTOR]](<5 x s32>)
627     %0:_(<5 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4
628     %1:_(<5 x s16>) = G_TRUNC %0
629     %2:_(<5 x s16>) = G_FREEZE %1
630     %3:_(<5 x s32>) = G_ANYEXT %2
631     $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4 = COPY %3
635 name: test_freeze_v6s16
636 body: |
637   bb.0:
639     ; CHECK-LABEL: name: test_freeze_v6s16
640     ; CHECK: [[COPY:%[0-9]+]]:_(<6 x s16>) = COPY $vgpr0_vgpr1_vgpr2
641     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<6 x s16>) = G_FREEZE [[COPY]]
642     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2 = COPY [[FREEZE]](<6 x s16>)
643     %0:_(<6 x s16>) = COPY $vgpr0_vgpr1_vgpr2
644     %1:_(<6 x s16>) = G_FREEZE %0
645     $vgpr0_vgpr1_vgpr2 = COPY %1
649 name: test_freeze_v8s16
650 body: |
651   bb.0:
653     ; CHECK-LABEL: name: test_freeze_v8s16
654     ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
655     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<8 x s16>) = G_FREEZE [[COPY]]
656     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[FREEZE]](<8 x s16>)
657     %0:_(<8 x s16>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
658     %1:_(<8 x s16>) = G_FREEZE %0
659     $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1
663 name: test_freeze_v2s64
664 body: |
665   bb.0:
667     ; CHECK-LABEL: name: test_freeze_v2s64
668     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
669     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<2 x s64>) = G_FREEZE [[COPY]]
670     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[FREEZE]](<2 x s64>)
671     %0:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
672     %1:_(<2 x s64>) = G_FREEZE %0
673     $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1
677 name: test_freeze_v4s8
678 body: |
679   bb.0:
680     liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
682     ; CHECK-LABEL: name: test_freeze_v4s8
683     ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
684     ; CHECK-NEXT: {{  $}}
685     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
686     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
687     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
688     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
689     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32)
690     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<4 x s32>) = G_FREEZE [[BUILD_VECTOR]]
691     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FREEZE]](<4 x s32>)
692     ; CHECK-NEXT: S_ENDPGM 0, implicit [[UV]](s32), implicit [[UV1]](s32), implicit [[UV2]](s32), implicit [[UV3]](s32)
693     %0:_(s32) = COPY $vgpr0
694     %1:_(s32) = COPY $vgpr1
695     %2:_(s32) = COPY $vgpr2
696     %3:_(s32) = COPY $vgpr3
697     %4:_(s8) = G_TRUNC %0
698     %5:_(s8) = G_TRUNC %1
699     %6:_(s8) = G_TRUNC %2
700     %7:_(s8) = G_TRUNC %3
701     %8:_(<4 x s8>) = G_BUILD_VECTOR %4, %5, %6, %7
702     %9:_(<4 x s8>) = G_FREEZE %8
703     %10:_(s8), %11:_(s8), %12:_(s8), %13:_(s8) = G_UNMERGE_VALUES %9
704     %14:_(s32) = G_ANYEXT %10
705     %15:_(s32) = G_ANYEXT %11
706     %16:_(s32) = G_ANYEXT %12
707     %17:_(s32) = G_ANYEXT %13
708     S_ENDPGM 0, implicit %14, implicit %15, implicit %16, implicit %17
712 name: test_freeze_p0
713 body: |
714   bb.0:
716     ; CHECK-LABEL: name: test_freeze_p0
717     ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1
718     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(p0) = G_FREEZE [[COPY]]
719     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[FREEZE]](p0)
720     %0:_(p0) = COPY $vgpr0_vgpr1
721     %1:_(p0) = G_FREEZE %0
722     $vgpr0_vgpr1 = COPY %1
726 name: test_freeze_p1
727 body: |
728   bb.0:
730     ; CHECK-LABEL: name: test_freeze_p1
731     ; CHECK: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
732     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(p1) = G_FREEZE [[COPY]]
733     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[FREEZE]](p1)
734     %0:_(p1) = COPY $vgpr0_vgpr1
735     %1:_(p1) = G_FREEZE %0
736     $vgpr0_vgpr1 = COPY %1
740 name: test_freeze_p2
741 body: |
742   bb.0:
744     ; CHECK-LABEL: name: test_freeze_p2
745     ; CHECK: [[COPY:%[0-9]+]]:_(p2) = COPY $vgpr0
746     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(p2) = G_FREEZE [[COPY]]
747     ; CHECK-NEXT: $vgpr0 = COPY [[FREEZE]](p2)
748     %0:_(p2) = COPY $vgpr0
749     %1:_(p2) = G_FREEZE %0
750     $vgpr0 = COPY %1
754 name: test_freeze_p3
755 body: |
756   bb.0:
758     ; CHECK-LABEL: name: test_freeze_p3
759     ; CHECK: [[COPY:%[0-9]+]]:_(p3) = COPY $vgpr0
760     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(p3) = G_FREEZE [[COPY]]
761     ; CHECK-NEXT: $vgpr0 = COPY [[FREEZE]](p3)
762     %0:_(p3) = COPY $vgpr0
763     %1:_(p3) = G_FREEZE %0
764     $vgpr0 = COPY %1
768 name: test_freeze_p4
769 body: |
770   bb.0:
772     ; CHECK-LABEL: name: test_freeze_p4
773     ; CHECK: [[COPY:%[0-9]+]]:_(p4) = COPY $vgpr0_vgpr1
774     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(p4) = G_FREEZE [[COPY]]
775     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[FREEZE]](p4)
776     %0:_(p4) = COPY $vgpr0_vgpr1
777     %1:_(p4) = G_FREEZE %0
778     $vgpr0_vgpr1 = COPY %1
782 name: test_freeze_p5
783 body: |
784   bb.0:
786     ; CHECK-LABEL: name: test_freeze_p5
787     ; CHECK: [[COPY:%[0-9]+]]:_(p5) = COPY $vgpr0
788     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(p5) = G_FREEZE [[COPY]]
789     ; CHECK-NEXT: $vgpr0 = COPY [[FREEZE]](p5)
790     %0:_(p5) = COPY $vgpr0
791     %1:_(p5) = G_FREEZE %0
792     $vgpr0 = COPY %1
796 name: test_freeze_p999
797 body: |
798   bb.0:
800     ; CHECK-LABEL: name: test_freeze_p999
801     ; CHECK: [[COPY:%[0-9]+]]:_(p999) = COPY $vgpr0_vgpr1
802     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(p999) = G_FREEZE [[COPY]]
803     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[FREEZE]](p999)
804     %0:_(p999) = COPY $vgpr0_vgpr1
805     %1:_(p999) = G_FREEZE %0
806     $vgpr0_vgpr1 = COPY %1
811 name: test_freeze_v2s1024
812 body: |
813   bb.0:
815     ; CHECK-LABEL: name: test_freeze_v2s1024
816     ; CHECK: [[DEF:%[0-9]+]]:_(<2 x s1024>) = G_IMPLICIT_DEF
817     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<2 x s1024>) = G_FREEZE [[DEF]]
818     ; CHECK-NEXT: S_NOP 0, implicit [[FREEZE]](<2 x s1024>)
819     %0:_(<2 x s1024>) = G_IMPLICIT_DEF
820     %1:_(<2 x s1024>) = G_FREEZE %0
821     S_NOP 0, implicit %1
826 name: test_freeze_v3s1024
827 body: |
828   bb.0:
830     ; CHECK-LABEL: name: test_freeze_v3s1024
831     ; CHECK: [[DEF:%[0-9]+]]:_(<3 x s1024>) = G_IMPLICIT_DEF
832     ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<3 x s1024>) = G_FREEZE [[DEF]]
833     ; CHECK-NEXT: S_NOP 0, implicit [[FREEZE]](<3 x s1024>)
834     %0:_(<3 x s1024>) = G_IMPLICIT_DEF
835     %1:_(<3 x s1024>) = G_FREEZE %0
836     S_NOP 0, implicit %1