1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx512f -O0 | FileCheck %s
3
4define <16 x float> @makefloat(float %f1, float %f2, float %f3, float %f4, float %f5, float %f6, float %f7, float %f8, float %f9, float %f10, float %f11, float %f12, float %f13, float %f14, float %f15, float %f16) #0 {
5; CHECK-LABEL: makefloat:
6; CHECK:       # BB#0: # %entry
7; CHECK-NEXT:    pushq %rbp
8; CHECK-NEXT:  .Lcfi0:
9; CHECK-NEXT:    .cfi_def_cfa_offset 16
10; CHECK-NEXT:  .Lcfi1:
11; CHECK-NEXT:    .cfi_offset %rbp, -16
12; CHECK-NEXT:    movq %rsp, %rbp
13; CHECK-NEXT:  .Lcfi2:
14; CHECK-NEXT:    .cfi_def_cfa_register %rbp
15; CHECK-NEXT:    andq $-64, %rsp
16; CHECK-NEXT:    subq $256, %rsp # imm = 0x100
17; CHECK-NEXT:    vmovss {{.*#+}} xmm8 = mem[0],zero,zero,zero
18; CHECK-NEXT:    vmovss {{.*#+}} xmm9 = mem[0],zero,zero,zero
19; CHECK-NEXT:    vmovss {{.*#+}} xmm10 = mem[0],zero,zero,zero
20; CHECK-NEXT:    vmovss {{.*#+}} xmm11 = mem[0],zero,zero,zero
21; CHECK-NEXT:    vmovss {{.*#+}} xmm12 = mem[0],zero,zero,zero
22; CHECK-NEXT:    vmovss {{.*#+}} xmm13 = mem[0],zero,zero,zero
23; CHECK-NEXT:    vmovss {{.*#+}} xmm14 = mem[0],zero,zero,zero
24; CHECK-NEXT:    vmovss {{.*#+}} xmm15 = mem[0],zero,zero,zero
25; CHECK-NEXT:    vmovss %xmm0, {{[0-9]+}}(%rsp)
26; CHECK-NEXT:    vmovss %xmm1, {{[0-9]+}}(%rsp)
27; CHECK-NEXT:    vmovss %xmm2, {{[0-9]+}}(%rsp)
28; CHECK-NEXT:    vmovss %xmm3, {{[0-9]+}}(%rsp)
29; CHECK-NEXT:    vmovss %xmm4, {{[0-9]+}}(%rsp)
30; CHECK-NEXT:    vmovss %xmm5, {{[0-9]+}}(%rsp)
31; CHECK-NEXT:    vmovss %xmm6, {{[0-9]+}}(%rsp)
32; CHECK-NEXT:    vmovss %xmm7, {{[0-9]+}}(%rsp)
33; CHECK-NEXT:    vmovss %xmm15, {{[0-9]+}}(%rsp)
34; CHECK-NEXT:    vmovss %xmm14, {{[0-9]+}}(%rsp)
35; CHECK-NEXT:    vmovss %xmm13, {{[0-9]+}}(%rsp)
36; CHECK-NEXT:    vmovss %xmm12, {{[0-9]+}}(%rsp)
37; CHECK-NEXT:    vmovss %xmm11, {{[0-9]+}}(%rsp)
38; CHECK-NEXT:    vmovss %xmm10, {{[0-9]+}}(%rsp)
39; CHECK-NEXT:    vmovss %xmm9, {{[0-9]+}}(%rsp)
40; CHECK-NEXT:    vmovss %xmm8, (%rsp)
41; CHECK-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
42; CHECK-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
43; CHECK-NEXT:    vmovss {{.*#+}} xmm2 = mem[0],zero,zero,zero
44; CHECK-NEXT:    vmovss {{.*#+}} xmm3 = mem[0],zero,zero,zero
45; CHECK-NEXT:    vmovss {{.*#+}} xmm4 = mem[0],zero,zero,zero
46; CHECK-NEXT:    vmovss {{.*#+}} xmm5 = mem[0],zero,zero,zero
47; CHECK-NEXT:    vmovss {{.*#+}} xmm6 = mem[0],zero,zero,zero
48; CHECK-NEXT:    vmovss {{.*#+}} xmm7 = mem[0],zero,zero,zero
49; CHECK-NEXT:    vmovss {{.*#+}} xmm8 = mem[0],zero,zero,zero
50; CHECK-NEXT:    vmovss {{.*#+}} xmm9 = mem[0],zero,zero,zero
51; CHECK-NEXT:    vmovss {{.*#+}} xmm10 = mem[0],zero,zero,zero
52; CHECK-NEXT:    vmovss {{.*#+}} xmm11 = mem[0],zero,zero,zero
53; CHECK-NEXT:    vmovss {{.*#+}} xmm12 = mem[0],zero,zero,zero
54; CHECK-NEXT:    vmovss {{.*#+}} xmm13 = mem[0],zero,zero,zero
55; CHECK-NEXT:    vmovss {{.*#+}} xmm14 = mem[0],zero,zero,zero
56; CHECK-NEXT:    vmovss {{.*#+}} xmm15 = mem[0],zero,zero,zero
57; CHECK-NEXT:    vmovss %xmm0, {{[0-9]+}}(%rsp)
58; CHECK-NEXT:    vmovss %xmm1, {{[0-9]+}}(%rsp)
59; CHECK-NEXT:    vmovss %xmm2, {{[0-9]+}}(%rsp)
60; CHECK-NEXT:    vmovss %xmm3, {{[0-9]+}}(%rsp)
61; CHECK-NEXT:    vmovss %xmm4, {{[0-9]+}}(%rsp)
62; CHECK-NEXT:    vmovss %xmm5, {{[0-9]+}}(%rsp)
63; CHECK-NEXT:    vmovss %xmm6, {{[0-9]+}}(%rsp)
64; CHECK-NEXT:    vmovss %xmm7, {{[0-9]+}}(%rsp)
65; CHECK-NEXT:    vmovss %xmm8, {{[0-9]+}}(%rsp)
66; CHECK-NEXT:    vmovss %xmm9, {{[0-9]+}}(%rsp)
67; CHECK-NEXT:    vmovss %xmm10, {{[0-9]+}}(%rsp)
68; CHECK-NEXT:    vmovss %xmm11, {{[0-9]+}}(%rsp)
69; CHECK-NEXT:    vmovss %xmm12, {{[0-9]+}}(%rsp)
70; CHECK-NEXT:    vmovss %xmm13, {{[0-9]+}}(%rsp)
71; CHECK-NEXT:    vmovss %xmm14, {{[0-9]+}}(%rsp)
72; CHECK-NEXT:    vmovss %xmm15, {{[0-9]+}}(%rsp)
73; CHECK-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
74; CHECK-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
75; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]
76; CHECK-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
77; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3]
78; CHECK-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
79; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[0]
80; CHECK-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
81; CHECK-NEXT:    vmovss {{.*#+}} xmm2 = mem[0],zero,zero,zero
82; CHECK-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3]
83; CHECK-NEXT:    vmovss {{.*#+}} xmm2 = mem[0],zero,zero,zero
84; CHECK-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0],xmm1[3]
85; CHECK-NEXT:    vmovss {{.*#+}} xmm2 = mem[0],zero,zero,zero
86; CHECK-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm2[0]
87; CHECK-NEXT:    # implicit-def: %YMM2
88; CHECK-NEXT:    vmovaps %xmm1, %xmm2
89; CHECK-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm2
90; CHECK-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
91; CHECK-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
92; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]
93; CHECK-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
94; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3]
95; CHECK-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
96; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[0]
97; CHECK-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
98; CHECK-NEXT:    vmovss {{.*#+}} xmm3 = mem[0],zero,zero,zero
99; CHECK-NEXT:    vinsertps {{.*#+}} xmm1 = xmm3[0],xmm1[0],xmm3[2,3]
100; CHECK-NEXT:    vmovss {{.*#+}} xmm3 = mem[0],zero,zero,zero
101; CHECK-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm3[0],xmm1[3]
102; CHECK-NEXT:    vmovss {{.*#+}} xmm3 = mem[0],zero,zero,zero
103; CHECK-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm3[0]
104; CHECK-NEXT:    # implicit-def: %YMM3
105; CHECK-NEXT:    vmovaps %xmm1, %xmm3
106; CHECK-NEXT:    vinsertf128 $1, %xmm0, %ymm3, %ymm3
107; CHECK-NEXT:    # implicit-def: %ZMM16
108; CHECK-NEXT:    vmovaps %zmm3, %zmm16
109; CHECK-NEXT:    vinsertf64x4 $1, %ymm2, %zmm16, %zmm16
110; CHECK-NEXT:    vmovaps %zmm16, {{[0-9]+}}(%rsp)
111; CHECK-NEXT:    vmovaps {{[0-9]+}}(%rsp), %zmm0
112; CHECK-NEXT:    movq %rbp, %rsp
113; CHECK-NEXT:    popq %rbp
114; CHECK-NEXT:    retq
115entry:
116  %__A.addr.i = alloca float, align 4
117  %__B.addr.i = alloca float, align 4
118  %__C.addr.i = alloca float, align 4
119  %__D.addr.i = alloca float, align 4
120  %__E.addr.i = alloca float, align 4
121  %__F.addr.i = alloca float, align 4
122  %__G.addr.i = alloca float, align 4
123  %__H.addr.i = alloca float, align 4
124  %__I.addr.i = alloca float, align 4
125  %__J.addr.i = alloca float, align 4
126  %__K.addr.i = alloca float, align 4
127  %__L.addr.i = alloca float, align 4
128  %__M.addr.i = alloca float, align 4
129  %__N.addr.i = alloca float, align 4
130  %__O.addr.i = alloca float, align 4
131  %__P.addr.i = alloca float, align 4
132  %.compoundliteral.i = alloca <16 x float>, align 64
133  %f1.addr = alloca float, align 4
134  %f2.addr = alloca float, align 4
135  %f3.addr = alloca float, align 4
136  %f4.addr = alloca float, align 4
137  %f5.addr = alloca float, align 4
138  %f6.addr = alloca float, align 4
139  %f7.addr = alloca float, align 4
140  %f8.addr = alloca float, align 4
141  %f9.addr = alloca float, align 4
142  %f10.addr = alloca float, align 4
143  %f11.addr = alloca float, align 4
144  %f12.addr = alloca float, align 4
145  %f13.addr = alloca float, align 4
146  %f14.addr = alloca float, align 4
147  %f15.addr = alloca float, align 4
148  %f16.addr = alloca float, align 4
149  store float %f1, float* %f1.addr, align 4
150  store float %f2, float* %f2.addr, align 4
151  store float %f3, float* %f3.addr, align 4
152  store float %f4, float* %f4.addr, align 4
153  store float %f5, float* %f5.addr, align 4
154  store float %f6, float* %f6.addr, align 4
155  store float %f7, float* %f7.addr, align 4
156  store float %f8, float* %f8.addr, align 4
157  store float %f9, float* %f9.addr, align 4
158  store float %f10, float* %f10.addr, align 4
159  store float %f11, float* %f11.addr, align 4
160  store float %f12, float* %f12.addr, align 4
161  store float %f13, float* %f13.addr, align 4
162  store float %f14, float* %f14.addr, align 4
163  store float %f15, float* %f15.addr, align 4
164  store float %f16, float* %f16.addr, align 4
165  %0 = load float, float* %f16.addr, align 4
166  %1 = load float, float* %f15.addr, align 4
167  %2 = load float, float* %f14.addr, align 4
168  %3 = load float, float* %f13.addr, align 4
169  %4 = load float, float* %f12.addr, align 4
170  %5 = load float, float* %f11.addr, align 4
171  %6 = load float, float* %f10.addr, align 4
172  %7 = load float, float* %f9.addr, align 4
173  %8 = load float, float* %f8.addr, align 4
174  %9 = load float, float* %f7.addr, align 4
175  %10 = load float, float* %f6.addr, align 4
176  %11 = load float, float* %f5.addr, align 4
177  %12 = load float, float* %f4.addr, align 4
178  %13 = load float, float* %f3.addr, align 4
179  %14 = load float, float* %f2.addr, align 4
180  %15 = load float, float* %f1.addr, align 4
181  store float %0, float* %__A.addr.i, align 4
182  store float %1, float* %__B.addr.i, align 4
183  store float %2, float* %__C.addr.i, align 4
184  store float %3, float* %__D.addr.i, align 4
185  store float %4, float* %__E.addr.i, align 4
186  store float %5, float* %__F.addr.i, align 4
187  store float %6, float* %__G.addr.i, align 4
188  store float %7, float* %__H.addr.i, align 4
189  store float %8, float* %__I.addr.i, align 4
190  store float %9, float* %__J.addr.i, align 4
191  store float %10, float* %__K.addr.i, align 4
192  store float %11, float* %__L.addr.i, align 4
193  store float %12, float* %__M.addr.i, align 4
194  store float %13, float* %__N.addr.i, align 4
195  store float %14, float* %__O.addr.i, align 4
196  store float %15, float* %__P.addr.i, align 4
197  %16 = load float, float* %__P.addr.i, align 4
198  %vecinit.i = insertelement <16 x float> undef, float %16, i32 0
199  %17 = load float, float* %__O.addr.i, align 4
200  %vecinit1.i = insertelement <16 x float> %vecinit.i, float %17, i32 1
201  %18 = load float, float* %__N.addr.i, align 4
202  %vecinit2.i = insertelement <16 x float> %vecinit1.i, float %18, i32 2
203  %19 = load float, float* %__M.addr.i, align 4
204  %vecinit3.i = insertelement <16 x float> %vecinit2.i, float %19, i32 3
205  %20 = load float, float* %__L.addr.i, align 4
206  %vecinit4.i = insertelement <16 x float> %vecinit3.i, float %20, i32 4
207  %21 = load float, float* %__K.addr.i, align 4
208  %vecinit5.i = insertelement <16 x float> %vecinit4.i, float %21, i32 5
209  %22 = load float, float* %__J.addr.i, align 4
210  %vecinit6.i = insertelement <16 x float> %vecinit5.i, float %22, i32 6
211  %23 = load float, float* %__I.addr.i, align 4
212  %vecinit7.i = insertelement <16 x float> %vecinit6.i, float %23, i32 7
213  %24 = load float, float* %__H.addr.i, align 4
214  %vecinit8.i = insertelement <16 x float> %vecinit7.i, float %24, i32 8
215  %25 = load float, float* %__G.addr.i, align 4
216  %vecinit9.i = insertelement <16 x float> %vecinit8.i, float %25, i32 9
217  %26 = load float, float* %__F.addr.i, align 4
218  %vecinit10.i = insertelement <16 x float> %vecinit9.i, float %26, i32 10
219  %27 = load float, float* %__E.addr.i, align 4
220  %vecinit11.i = insertelement <16 x float> %vecinit10.i, float %27, i32 11
221  %28 = load float, float* %__D.addr.i, align 4
222  %vecinit12.i = insertelement <16 x float> %vecinit11.i, float %28, i32 12
223  %29 = load float, float* %__C.addr.i, align 4
224  %vecinit13.i = insertelement <16 x float> %vecinit12.i, float %29, i32 13
225  %30 = load float, float* %__B.addr.i, align 4
226  %vecinit14.i = insertelement <16 x float> %vecinit13.i, float %30, i32 14
227  %31 = load float, float* %__A.addr.i, align 4
228  %vecinit15.i = insertelement <16 x float> %vecinit14.i, float %31, i32 15
229  store <16 x float> %vecinit15.i, <16 x float>* %.compoundliteral.i, align 64
230  %32 = load <16 x float>, <16 x float>* %.compoundliteral.i, align 64
231  ret <16 x float> %32
232}
233