Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / X86 / GlobalISel / x86_64-irtranslator.ll
blob18907c0c40045ea26da1ed91aa8625c54706a97d
1 ; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 ; RUN: llc -mtriple=x86_64-linux-gnu -O0 -global-isel -stop-after=irtranslator -verify-machineinstrs %s -o - 2>&1 | FileCheck %s
4 define i8 @zext_i1_to_i8(i1 %val) {
5   ; CHECK-LABEL: name: zext_i1_to_i8
6   ; CHECK: bb.1 (%ir-block.0):
7   ; CHECK:   liveins: $edi
8   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $edi
9   ; CHECK:   [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY]](s32)
10   ; CHECK:   [[ZEXT:%[0-9]+]]:_(s8) = G_ZEXT [[TRUNC]](s1)
11   ; CHECK:   $al = COPY [[ZEXT]](s8)
12   ; CHECK:   RET 0, implicit $al
13   %res = zext i1 %val to i8
14   ret i8 %res
17 define i16 @zext_i1_to_i16(i1 %val) {
18   ; CHECK-LABEL: name: zext_i1_to_i16
19   ; CHECK: bb.1 (%ir-block.0):
20   ; CHECK:   liveins: $edi
21   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $edi
22   ; CHECK:   [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY]](s32)
23   ; CHECK:   [[ZEXT:%[0-9]+]]:_(s16) = G_ZEXT [[TRUNC]](s1)
24   ; CHECK:   $ax = COPY [[ZEXT]](s16)
25   ; CHECK:   RET 0, implicit $ax
26   %res = zext i1 %val to i16
27   ret i16 %res
30 define i32 @zext_i1_to_i32(i1 %val) {
31   ; CHECK-LABEL: name: zext_i1_to_i32
32   ; CHECK: bb.1 (%ir-block.0):
33   ; CHECK:   liveins: $edi
34   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $edi
35   ; CHECK:   [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY]](s32)
36   ; CHECK:   [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[TRUNC]](s1)
37   ; CHECK:   $eax = COPY [[ZEXT]](s32)
38   ; CHECK:   RET 0, implicit $eax
39   %res = zext i1 %val to i32
40   ret i32 %res
43 define i64 @zext_i1_to_i64(i1 %val) {
44   ; CHECK-LABEL: name: zext_i1_to_i64
45   ; CHECK: bb.1 (%ir-block.0):
46   ; CHECK:   liveins: $edi
47   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $edi
48   ; CHECK:   [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY]](s32)
49   ; CHECK:   [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[TRUNC]](s1)
50   ; CHECK:   $rax = COPY [[ZEXT]](s64)
51   ; CHECK:   RET 0, implicit $rax
52   %res = zext i1 %val to i64
53   ret i64 %res
56 define i16 @zext_i8_to_i16(i8 %val) {
57   ; CHECK-LABEL: name: zext_i8_to_i16
58   ; CHECK: bb.1 (%ir-block.0):
59   ; CHECK:   liveins: $edi
60   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $edi
61   ; CHECK:   [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)
62   ; CHECK:   [[ZEXT:%[0-9]+]]:_(s16) = G_ZEXT [[TRUNC]](s8)
63   ; CHECK:   $ax = COPY [[ZEXT]](s16)
64   ; CHECK:   RET 0, implicit $ax
65   %res = zext i8 %val to i16
66   ret i16 %res
69 define i32 @zext_i8_to_i32(i8 %val) {
70   ; CHECK-LABEL: name: zext_i8_to_i32
71   ; CHECK: bb.1 (%ir-block.0):
72   ; CHECK:   liveins: $edi
73   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $edi
74   ; CHECK:   [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)
75   ; CHECK:   [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[TRUNC]](s8)
76   ; CHECK:   $eax = COPY [[ZEXT]](s32)
77   ; CHECK:   RET 0, implicit $eax
78   %res = zext i8 %val to i32
79   ret i32 %res
82 define i64 @zext_i8_to_i64(i8 %val) {
83   ; CHECK-LABEL: name: zext_i8_to_i64
84   ; CHECK: bb.1 (%ir-block.0):
85   ; CHECK:   liveins: $edi
86   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $edi
87   ; CHECK:   [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)
88   ; CHECK:   [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[TRUNC]](s8)
89   ; CHECK:   $rax = COPY [[ZEXT]](s64)
90   ; CHECK:   RET 0, implicit $rax
91   %res = zext i8 %val to i64
92   ret i64 %res
95 define i32 @zext_i16_to_i32(i16 %val) {
96   ; CHECK-LABEL: name: zext_i16_to_i32
97   ; CHECK: bb.1 (%ir-block.0):
98   ; CHECK:   liveins: $edi
99   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $edi
100   ; CHECK:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
101   ; CHECK:   [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[TRUNC]](s16)
102   ; CHECK:   $eax = COPY [[ZEXT]](s32)
103   ; CHECK:   RET 0, implicit $eax
104   %res = zext i16 %val to i32
105   ret i32 %res
108 define i64 @zext_i16_to_i64(i16 %val) {
109   ; CHECK-LABEL: name: zext_i16_to_i64
110   ; CHECK: bb.1 (%ir-block.0):
111   ; CHECK:   liveins: $edi
112   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $edi
113   ; CHECK:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
114   ; CHECK:   [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[TRUNC]](s16)
115   ; CHECK:   $rax = COPY [[ZEXT]](s64)
116   ; CHECK:   RET 0, implicit $rax
117   %res = zext i16 %val to i64
118   ret i64 %res
121 define i64 @zext_i32_to_i64(i32 %val) {
122   ; CHECK-LABEL: name: zext_i32_to_i64
123   ; CHECK: bb.1 (%ir-block.0):
124   ; CHECK:   liveins: $edi
125   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $edi
126   ; CHECK:   [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY]](s32)
127   ; CHECK:   $rax = COPY [[ZEXT]](s64)
128   ; CHECK:   RET 0, implicit $rax
129   %res = zext i32 %val to i64
130   ret i64 %res
133 define i8 @test_sdiv_i8(i8 %arg1, i8 %arg2) {
134   ; CHECK-LABEL: name: test_sdiv_i8
135   ; CHECK: bb.1 (%ir-block.0):
136   ; CHECK:   liveins: $edi, $esi
137   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $edi
138   ; CHECK:   [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)
139   ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $esi
140   ; CHECK:   [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[COPY1]](s32)
141   ; CHECK:   [[SDIV:%[0-9]+]]:_(s8) = G_SDIV [[TRUNC]], [[TRUNC1]]
142   ; CHECK:   $al = COPY [[SDIV]](s8)
143   ; CHECK:   RET 0, implicit $al
144   %res = sdiv i8 %arg1, %arg2
145   ret i8 %res
148 define i16 @test_sdiv_i16(i16 %arg1, i16 %arg2) {
149   ; CHECK-LABEL: name: test_sdiv_i16
150   ; CHECK: bb.1 (%ir-block.0):
151   ; CHECK:   liveins: $edi, $esi
152   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $edi
153   ; CHECK:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
154   ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $esi
155   ; CHECK:   [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)
156   ; CHECK:   [[SDIV:%[0-9]+]]:_(s16) = G_SDIV [[TRUNC]], [[TRUNC1]]
157   ; CHECK:   $ax = COPY [[SDIV]](s16)
158   ; CHECK:   RET 0, implicit $ax
159   %res = sdiv i16 %arg1, %arg2
160   ret i16 %res
163 define i32 @test_sdiv_i32(i32 %arg1, i32 %arg2) {
164   ; CHECK-LABEL: name: test_sdiv_i32
165   ; CHECK: bb.1 (%ir-block.0):
166   ; CHECK:   liveins: $edi, $esi
167   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $edi
168   ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $esi
169   ; CHECK:   [[SDIV:%[0-9]+]]:_(s32) = G_SDIV [[COPY]], [[COPY1]]
170   ; CHECK:   $eax = COPY [[SDIV]](s32)
171   ; CHECK:   RET 0, implicit $eax
172   %res = sdiv i32 %arg1, %arg2
173   ret i32 %res
176 define i64 @test_sdiv_i64(i64 %arg1, i64 %arg2) {
177   ; CHECK-LABEL: name: test_sdiv_i64
178   ; CHECK: bb.1 (%ir-block.0):
179   ; CHECK:   liveins: $rdi, $rsi
180   ; CHECK:   [[COPY:%[0-9]+]]:_(s64) = COPY $rdi
181   ; CHECK:   [[COPY1:%[0-9]+]]:_(s64) = COPY $rsi
182   ; CHECK:   [[SDIV:%[0-9]+]]:_(s64) = G_SDIV [[COPY]], [[COPY1]]
183   ; CHECK:   $rax = COPY [[SDIV]](s64)
184   ; CHECK:   RET 0, implicit $rax
185   %res = sdiv i64 %arg1, %arg2
186   ret i64 %res
188 define float @test_fptrunc(double %in) {
189   ; CHECK-LABEL: name: test_fptrunc
190   ; CHECK: bb.1 (%ir-block.0):
191   ; CHECK:   liveins: $xmm0
192   ; CHECK:   [[COPY:%[0-9]+]]:_(s64) = COPY $xmm0
193   ; CHECK:   [[FPTRUNC:%[0-9]+]]:_(s32) = G_FPTRUNC [[COPY]](s64)
194   ; CHECK:   $xmm0 = COPY [[FPTRUNC]](s32)
195   ; CHECK:   RET 0, implicit $xmm0
196   %res = fptrunc double %in to float
197   ret float %res
200 define i8 @test_srem_i8(i8 %arg1, i8 %arg2) {
201   ; CHECK-LABEL: name: test_srem_i8
202   ; CHECK: bb.1 (%ir-block.0):
203   ; CHECK:   liveins: $edi, $esi
204   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $edi
205   ; CHECK:   [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)
206   ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $esi
207   ; CHECK:   [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[COPY1]](s32)
208   ; CHECK:   [[SREM:%[0-9]+]]:_(s8) = G_SREM [[TRUNC]], [[TRUNC1]]
209   ; CHECK:   $al = COPY [[SREM]](s8)
210   ; CHECK:   RET 0, implicit $al
211   %res = srem i8 %arg1, %arg2
212   ret i8 %res
215 define i16 @test_srem_i16(i16 %arg1, i16 %arg2) {
216   ; CHECK-LABEL: name: test_srem_i16
217   ; CHECK: bb.1 (%ir-block.0):
218   ; CHECK:   liveins: $edi, $esi
219   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $edi
220   ; CHECK:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
221   ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $esi
222   ; CHECK:   [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)
223   ; CHECK:   [[SREM:%[0-9]+]]:_(s16) = G_SREM [[TRUNC]], [[TRUNC1]]
224   ; CHECK:   $ax = COPY [[SREM]](s16)
225   ; CHECK:   RET 0, implicit $ax
226   %res = srem i16 %arg1, %arg2
227   ret i16 %res
230 define i32 @test_srem_i32(i32 %arg1, i32 %arg2) {
231   ; CHECK-LABEL: name: test_srem_i32
232   ; CHECK: bb.1 (%ir-block.0):
233   ; CHECK:   liveins: $edi, $esi
234   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $edi
235   ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $esi
236   ; CHECK:   [[SREM:%[0-9]+]]:_(s32) = G_SREM [[COPY]], [[COPY1]]
237   ; CHECK:   $eax = COPY [[SREM]](s32)
238   ; CHECK:   RET 0, implicit $eax
239   %res = srem i32 %arg1, %arg2
240   ret i32 %res
243 define i64 @test_srem_i64(i64 %arg1, i64 %arg2) {
244   ; CHECK-LABEL: name: test_srem_i64
245   ; CHECK: bb.1 (%ir-block.0):
246   ; CHECK:   liveins: $rdi, $rsi
247   ; CHECK:   [[COPY:%[0-9]+]]:_(s64) = COPY $rdi
248   ; CHECK:   [[COPY1:%[0-9]+]]:_(s64) = COPY $rsi
249   ; CHECK:   [[SREM:%[0-9]+]]:_(s64) = G_SREM [[COPY]], [[COPY1]]
250   ; CHECK:   $rax = COPY [[SREM]](s64)
251   ; CHECK:   RET 0, implicit $rax
252   %res = srem i64 %arg1, %arg2
253   ret i64 %res
256 define i8 @test_udiv_i8(i8 %arg1, i8 %arg2) {
257   ; CHECK-LABEL: name: test_udiv_i8
258   ; CHECK: bb.1 (%ir-block.0):
259   ; CHECK:   liveins: $edi, $esi
260   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $edi
261   ; CHECK:   [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)
262   ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $esi
263   ; CHECK:   [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[COPY1]](s32)
264   ; CHECK:   [[UDIV:%[0-9]+]]:_(s8) = G_UDIV [[TRUNC]], [[TRUNC1]]
265   ; CHECK:   $al = COPY [[UDIV]](s8)
266   ; CHECK:   RET 0, implicit $al
267   %res = udiv i8 %arg1, %arg2
268   ret i8 %res
271 define i16 @test_udiv_i16(i16 %arg1, i16 %arg2) {
272   ; CHECK-LABEL: name: test_udiv_i16
273   ; CHECK: bb.1 (%ir-block.0):
274   ; CHECK:   liveins: $edi, $esi
275   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $edi
276   ; CHECK:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
277   ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $esi
278   ; CHECK:   [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)
279   ; CHECK:   [[UDIV:%[0-9]+]]:_(s16) = G_UDIV [[TRUNC]], [[TRUNC1]]
280   ; CHECK:   $ax = COPY [[UDIV]](s16)
281   ; CHECK:   RET 0, implicit $ax
282   %res = udiv i16 %arg1, %arg2
283   ret i16 %res
286 define i32 @test_udiv_i32(i32 %arg1, i32 %arg2) {
287   ; CHECK-LABEL: name: test_udiv_i32
288   ; CHECK: bb.1 (%ir-block.0):
289   ; CHECK:   liveins: $edi, $esi
290   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $edi
291   ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $esi
292   ; CHECK:   [[UDIV:%[0-9]+]]:_(s32) = G_UDIV [[COPY]], [[COPY1]]
293   ; CHECK:   $eax = COPY [[UDIV]](s32)
294   ; CHECK:   RET 0, implicit $eax
295   %res = udiv i32 %arg1, %arg2
296   ret i32 %res
299 define i64 @test_udiv_i64(i64 %arg1, i64 %arg2) {
300   ; CHECK-LABEL: name: test_udiv_i64
301   ; CHECK: bb.1 (%ir-block.0):
302   ; CHECK:   liveins: $rdi, $rsi
303   ; CHECK:   [[COPY:%[0-9]+]]:_(s64) = COPY $rdi
304   ; CHECK:   [[COPY1:%[0-9]+]]:_(s64) = COPY $rsi
305   ; CHECK:   [[UDIV:%[0-9]+]]:_(s64) = G_UDIV [[COPY]], [[COPY1]]
306   ; CHECK:   $rax = COPY [[UDIV]](s64)
307   ; CHECK:   RET 0, implicit $rax
308   %res = udiv i64 %arg1, %arg2
309   ret i64 %res
312 define i8 @test_urem_i8(i8 %arg1, i8 %arg2) {
313   ; CHECK-LABEL: name: test_urem_i8
314   ; CHECK: bb.1 (%ir-block.0):
315   ; CHECK:   liveins: $edi, $esi
316   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $edi
317   ; CHECK:   [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)
318   ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $esi
319   ; CHECK:   [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[COPY1]](s32)
320   ; CHECK:   [[UREM:%[0-9]+]]:_(s8) = G_UREM [[TRUNC]], [[TRUNC1]]
321   ; CHECK:   $al = COPY [[UREM]](s8)
322   ; CHECK:   RET 0, implicit $al
323   %res = urem i8 %arg1, %arg2
324   ret i8 %res
327 define i16 @test_urem_i16(i16 %arg1, i16 %arg2) {
328   ; CHECK-LABEL: name: test_urem_i16
329   ; CHECK: bb.1 (%ir-block.0):
330   ; CHECK:   liveins: $edi, $esi
331   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $edi
332   ; CHECK:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
333   ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $esi
334   ; CHECK:   [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)
335   ; CHECK:   [[UREM:%[0-9]+]]:_(s16) = G_UREM [[TRUNC]], [[TRUNC1]]
336   ; CHECK:   $ax = COPY [[UREM]](s16)
337   ; CHECK:   RET 0, implicit $ax
338   %res = urem i16 %arg1, %arg2
339   ret i16 %res
342 define i32 @test_urem_i32(i32 %arg1, i32 %arg2) {
343   ; CHECK-LABEL: name: test_urem_i32
344   ; CHECK: bb.1 (%ir-block.0):
345   ; CHECK:   liveins: $edi, $esi
346   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $edi
347   ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $esi
348   ; CHECK:   [[UREM:%[0-9]+]]:_(s32) = G_UREM [[COPY]], [[COPY1]]
349   ; CHECK:   $eax = COPY [[UREM]](s32)
350   ; CHECK:   RET 0, implicit $eax
351   %res = urem i32 %arg1, %arg2
352   ret i32 %res
355 define i64 @test_urem_i64(i64 %arg1, i64 %arg2) {
356   ; CHECK-LABEL: name: test_urem_i64
357   ; CHECK: bb.1 (%ir-block.0):
358   ; CHECK:   liveins: $rdi, $rsi
359   ; CHECK:   [[COPY:%[0-9]+]]:_(s64) = COPY $rdi
360   ; CHECK:   [[COPY1:%[0-9]+]]:_(s64) = COPY $rsi
361   ; CHECK:   [[UREM:%[0-9]+]]:_(s64) = G_UREM [[COPY]], [[COPY1]]
362   ; CHECK:   $rax = COPY [[UREM]](s64)
363   ; CHECK:   RET 0, implicit $rax
364   %res = urem i64 %arg1, %arg2
365   ret i64 %res
368 define <2 x float> @test_const_v2f32() {
369   ; CHECK-LABEL: name: test_const_v2f32
370   ; CHECK: bb.1 (%ir-block.0):
371   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 1.000000e+00
372   ; CHECK-NEXT:   [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32)
373   ; CHECK-NEXT:   [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[BUILD_VECTOR]](<2 x s32>)
374   ; CHECK-NEXT:   [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
375   ; CHECK-NEXT:   [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[UV]](s32), [[UV1]](s32), [[DEF]](s32), [[DEF]](s32)
376   ; CHECK-NEXT:   $xmm0 = COPY [[BUILD_VECTOR1]](<4 x s32>)
377   ; CHECK-NEXT:   RET 0, implicit $xmm0
378   ret <2 x float> <float 1.0, float 1.0>
381 define <3 x float> @test_const_v3f32() {
382   ; CHECK-LABEL: name: test_const_v3f32
383   ; CHECK: bb.1 (%ir-block.0):
384   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 1.000000e+00
385   ; CHECK-NEXT:   [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32)
386   ; CHECK-NEXT:   [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[BUILD_VECTOR]](<3 x s32>)
387   ; CHECK-NEXT:   [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
388   ; CHECK-NEXT:   [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[UV]](s32), [[UV1]](s32), [[UV2]](s32), [[DEF]](s32)
389   ; CHECK-NEXT:   $xmm0 = COPY [[BUILD_VECTOR1]](<4 x s32>)
390   ; CHECK-NEXT:   RET 0, implicit $xmm0
391   ret <3 x float> <float 1.0, float 1.0, float 1.0>
394 define <5 x float> @test_const_v5f32() {
395   ; CHECK-LABEL: name: test_const_v5f32
396   ; CHECK: bb.1 (%ir-block.0):
397   ; CHECK-NEXT:   liveins: $rdi
398   ; CHECK-NEXT: {{  $}}
399   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $rdi
400   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 1.000000e+00
401   ; CHECK-NEXT:   [[BUILD_VECTOR:%[0-9]+]]:_(<5 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
402   ; CHECK-NEXT:   G_STORE [[BUILD_VECTOR]](<5 x s32>), [[COPY]](p0) :: (store (<5 x s32>), align 32)
403   ; CHECK-NEXT:   $rax = COPY [[COPY]](p0)
404   ; CHECK-NEXT:   RET 0
405   ret <5 x float> <float 1.0, float 1.0, float 1.0, float 1.0, float 1.0>
408 define <6 x float> @test_const_v6f32() {
409   ; CHECK-LABEL: name: test_const_v6f32
410   ; CHECK: bb.1 (%ir-block.0):
411   ; CHECK-NEXT:   liveins: $rdi
412   ; CHECK-NEXT: {{  $}}
413   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $rdi
414   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 1.000000e+00
415   ; CHECK-NEXT:   [[BUILD_VECTOR:%[0-9]+]]:_(<6 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
416   ; CHECK-NEXT:   G_STORE [[BUILD_VECTOR]](<6 x s32>), [[COPY]](p0) :: (store (<6 x s32>), align 32)
417   ; CHECK-NEXT:   $rax = COPY [[COPY]](p0)
418   ; CHECK-NEXT:   RET 0
419   ret <6 x float> <float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0>