@@ -31,88 +31,62 @@ define i32 @dot_ext_v8i8_v8i32(ptr %a, i64 %a_stride, ptr %b) nounwind {
31
31
; SSE2-NEXT: pinsrw $6, %r9d, %xmm0
32
32
; SSE2-NEXT: pinsrw $7, %esi, %xmm0
33
33
; SSE2-NEXT: movdqu (%rdx), %xmm1
34
- ; SSE2-NEXT: pmaddwd %xmm1, %xmm0
35
- ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
36
- ; SSE2-NEXT: paddd %xmm0, %xmm1
37
- ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]
34
+ ; SSE2-NEXT: pmaddwd %xmm0, %xmm1
35
+ ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]
38
36
; SSE2-NEXT: paddd %xmm1, %xmm0
39
- ; SSE2-NEXT: movd %xmm0, %eax
37
+ ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
38
+ ; SSE2-NEXT: paddd %xmm0, %xmm1
39
+ ; SSE2-NEXT: movd %xmm1, %eax
40
40
; SSE2-NEXT: popq %rbx
41
41
; SSE2-NEXT: popq %r14
42
42
; SSE2-NEXT: retq
43
43
;
44
44
; SSE4-LABEL: dot_ext_v8i8_v8i32:
45
45
; SSE4: # %bb.0: # %entry
46
- ; SSE4-NEXT: leaq (%rsi,%rsi,4 ), %rax
47
- ; SSE4-NEXT: leaq (%rsi,%rsi,2 ), %rcx
48
- ; SSE4-NEXT: leaq (,%rsi,8 ), %r8
49
- ; SSE4-NEXT: movzbl (%rdi ), %r9d
50
- ; SSE4-NEXT: movd %r9d , %xmm0
51
- ; SSE4-NEXT: pinsrb $1, (%rdi,%rsi) , %xmm0
52
- ; SSE4-NEXT: pinsrb $2, (%rdi,%rsi,2 ), %xmm0
53
- ; SSE4-NEXT: pinsrb $3 , (%rdi,%rcx ), %xmm0
54
- ; SSE4-NEXT: pinsrb $4 , (%rdi,%rsi,4 ), %xmm0
55
- ; SSE4-NEXT: pinsrb $5 , (%rdi,%rax ), %xmm0
56
- ; SSE4-NEXT: pinsrb $6 , (%rdi,%rcx,2 ), %xmm0
57
- ; SSE4-NEXT: subq %rsi, %r8
58
- ; SSE4-NEXT: pinsrb $7 , (%rdi,%r8 ), %xmm0
46
+ ; SSE4-NEXT: movzbl (%rdi ), %eax
47
+ ; SSE4-NEXT: leaq (%rsi,%rsi,4 ), %rcx
48
+ ; SSE4-NEXT: leaq (%rsi ,%rsi,2 ), %r8
49
+ ; SSE4-NEXT: leaq (,%rsi,8 ), %r9
50
+ ; SSE4-NEXT: subq %rsi , %r9
51
+ ; SSE4-NEXT: movd %eax , %xmm0
52
+ ; SSE4-NEXT: pinsrb $2, (%rdi,%rsi), %xmm0
53
+ ; SSE4-NEXT: pinsrb $4 , (%rdi,%rsi,2 ), %xmm0
54
+ ; SSE4-NEXT: pinsrb $6 , (%rdi,%r8 ), %xmm0
55
+ ; SSE4-NEXT: pinsrb $8 , (%rdi,%rsi,4 ), %xmm0
56
+ ; SSE4-NEXT: pinsrb $10 , (%rdi,%rcx), %xmm0
57
+ ; SSE4-NEXT: pinsrb $12, (%rdi,%r8,2), %xmm0
58
+ ; SSE4-NEXT: pinsrb $14 , (%rdi,%r9 ), %xmm0
59
59
; SSE4-NEXT: movdqu (%rdx), %xmm1
60
- ; SSE4-NEXT: pmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
61
- ; SSE4-NEXT: pmaddwd %xmm1, %xmm0
62
- ; SSE4-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
63
- ; SSE4-NEXT: paddd %xmm0, %xmm1
64
- ; SSE4-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]
60
+ ; SSE4-NEXT: pmaddwd %xmm0, %xmm1
61
+ ; SSE4-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]
65
62
; SSE4-NEXT: paddd %xmm1, %xmm0
66
- ; SSE4-NEXT: movd %xmm0, %eax
63
+ ; SSE4-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
64
+ ; SSE4-NEXT: paddd %xmm0, %xmm1
65
+ ; SSE4-NEXT: movd %xmm1, %eax
67
66
; SSE4-NEXT: retq
68
67
;
69
- ; AVX2-LABEL: dot_ext_v8i8_v8i32:
70
- ; AVX2: # %bb.0: # %entry
71
- ; AVX2-NEXT: leaq (%rsi,%rsi,4), %rax
72
- ; AVX2-NEXT: leaq (%rsi,%rsi,2), %rcx
73
- ; AVX2-NEXT: leaq (,%rsi,8), %r8
74
- ; AVX2-NEXT: subq %rsi, %r8
75
- ; AVX2-NEXT: movzbl (%rdi), %r9d
76
- ; AVX2-NEXT: vmovd %r9d, %xmm0
77
- ; AVX2-NEXT: vpinsrb $1, (%rdi,%rsi), %xmm0, %xmm0
78
- ; AVX2-NEXT: vpinsrb $2, (%rdi,%rsi,2), %xmm0, %xmm0
79
- ; AVX2-NEXT: vpinsrb $3, (%rdi,%rcx), %xmm0, %xmm0
80
- ; AVX2-NEXT: vpinsrb $4, (%rdi,%rsi,4), %xmm0, %xmm0
81
- ; AVX2-NEXT: vpinsrb $5, (%rdi,%rax), %xmm0, %xmm0
82
- ; AVX2-NEXT: vpinsrb $6, (%rdi,%rcx,2), %xmm0, %xmm0
83
- ; AVX2-NEXT: vpinsrb $7, (%rdi,%r8), %xmm0, %xmm0
84
- ; AVX2-NEXT: vpmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
85
- ; AVX2-NEXT: vpmaddwd (%rdx), %xmm0, %xmm0
86
- ; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
87
- ; AVX2-NEXT: vpaddd %xmm1, %xmm0, %xmm0
88
- ; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
89
- ; AVX2-NEXT: vpaddd %xmm1, %xmm0, %xmm0
90
- ; AVX2-NEXT: vmovd %xmm0, %eax
91
- ; AVX2-NEXT: retq
92
- ;
93
- ; AVX512-LABEL: dot_ext_v8i8_v8i32:
94
- ; AVX512: # %bb.0: # %entry
95
- ; AVX512-NEXT: leaq (%rsi,%rsi,4), %rax
96
- ; AVX512-NEXT: leaq (%rsi,%rsi,2), %rcx
97
- ; AVX512-NEXT: leaq (,%rsi,8), %r8
98
- ; AVX512-NEXT: movzbl (%rdi), %r9d
99
- ; AVX512-NEXT: vmovd %r9d, %xmm0
100
- ; AVX512-NEXT: vpinsrb $1, (%rdi,%rsi), %xmm0, %xmm0
101
- ; AVX512-NEXT: vpinsrb $2, (%rdi,%rsi,2), %xmm0, %xmm0
102
- ; AVX512-NEXT: vpinsrb $3, (%rdi,%rcx), %xmm0, %xmm0
103
- ; AVX512-NEXT: vpinsrb $4, (%rdi,%rsi,4), %xmm0, %xmm0
104
- ; AVX512-NEXT: vpinsrb $5, (%rdi,%rax), %xmm0, %xmm0
105
- ; AVX512-NEXT: vpinsrb $6, (%rdi,%rcx,2), %xmm0, %xmm0
106
- ; AVX512-NEXT: subq %rsi, %r8
107
- ; AVX512-NEXT: vpinsrb $7, (%rdi,%r8), %xmm0, %xmm0
108
- ; AVX512-NEXT: vpmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
109
- ; AVX512-NEXT: vpmaddwd (%rdx), %xmm0, %xmm0
110
- ; AVX512-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
111
- ; AVX512-NEXT: vpaddd %xmm1, %xmm0, %xmm0
112
- ; AVX512-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
113
- ; AVX512-NEXT: vpaddd %xmm1, %xmm0, %xmm0
114
- ; AVX512-NEXT: vmovd %xmm0, %eax
115
- ; AVX512-NEXT: retq
68
+ ; AVX-LABEL: dot_ext_v8i8_v8i32:
69
+ ; AVX: # %bb.0: # %entry
70
+ ; AVX-NEXT: movzbl (%rdi), %eax
71
+ ; AVX-NEXT: leaq (%rsi,%rsi,2), %rcx
72
+ ; AVX-NEXT: leaq (%rsi,%rsi,4), %r8
73
+ ; AVX-NEXT: leaq (,%rsi,8), %r9
74
+ ; AVX-NEXT: subq %rsi, %r9
75
+ ; AVX-NEXT: vmovd %eax, %xmm0
76
+ ; AVX-NEXT: vpinsrb $2, (%rdi,%rsi), %xmm0, %xmm0
77
+ ; AVX-NEXT: vpinsrb $4, (%rdi,%rsi,2), %xmm0, %xmm0
78
+ ; AVX-NEXT: vpinsrb $6, (%rdi,%rcx), %xmm0, %xmm0
79
+ ; AVX-NEXT: vpinsrb $8, (%rdi,%rsi,4), %xmm0, %xmm0
80
+ ; AVX-NEXT: vpinsrb $10, (%rdi,%r8), %xmm0, %xmm0
81
+ ; AVX-NEXT: vpinsrb $12, (%rdi,%rcx,2), %xmm0, %xmm0
82
+ ; AVX-NEXT: vpinsrb $14, (%rdi,%r9), %xmm0, %xmm0
83
+ ; AVX-NEXT: vpmaddwd (%rdx), %xmm0, %xmm0
84
+ ; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
85
+ ; AVX-NEXT: vpaddd %xmm1, %xmm0, %xmm0
86
+ ; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
87
+ ; AVX-NEXT: vpaddd %xmm1, %xmm0, %xmm0
88
+ ; AVX-NEXT: vmovd %xmm0, %eax
89
+ ; AVX-NEXT: retq
116
90
entry:
117
91
%var0 = load i8 , ptr %a , align 1
118
92
%arrayidx.1 = getelementptr inbounds i8 , ptr %a , i64 %a_stride
@@ -175,14 +149,13 @@ define i32 @dot_ext_v4i8_v4i32(ptr %a, i64 %a_stride, ptr %b) nounwind {
175
149
;
176
150
; SSE4-LABEL: dot_ext_v4i8_v4i32:
177
151
; SSE4: # %bb.0: # %entry
178
- ; SSE4-NEXT: leaq (%rsi,%rsi,2 ), %rax
179
- ; SSE4-NEXT: movzbl (%rdi ), %ecx
180
- ; SSE4-NEXT: movd %ecx , %xmm0
181
- ; SSE4-NEXT: pinsrb $1 , (%rdi,%rsi), %xmm0
182
- ; SSE4-NEXT: pinsrb $2 , (%rdi,%rsi,2), %xmm0
183
- ; SSE4-NEXT: pinsrb $3 , (%rdi,%rax ), %xmm0
152
+ ; SSE4-NEXT: movzbl (%rdi ), %eax
153
+ ; SSE4-NEXT: leaq (%rsi,%rsi,2 ), %rcx
154
+ ; SSE4-NEXT: movd %eax , %xmm0
155
+ ; SSE4-NEXT: pinsrb $4 , (%rdi,%rsi), %xmm0
156
+ ; SSE4-NEXT: pinsrb $8 , (%rdi,%rsi,2), %xmm0
157
+ ; SSE4-NEXT: pinsrb $12 , (%rdi,%rcx ), %xmm0
184
158
; SSE4-NEXT: pmovzxwd {{.*#+}} xmm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero
185
- ; SSE4-NEXT: pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero
186
159
; SSE4-NEXT: pmaddwd %xmm0, %xmm1
187
160
; SSE4-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]
188
161
; SSE4-NEXT: paddd %xmm1, %xmm0
@@ -194,12 +167,11 @@ define i32 @dot_ext_v4i8_v4i32(ptr %a, i64 %a_stride, ptr %b) nounwind {
194
167
; AVX-LABEL: dot_ext_v4i8_v4i32:
195
168
; AVX: # %bb.0: # %entry
196
169
; AVX-NEXT: movzbl (%rdi), %eax
170
+ ; AVX-NEXT: leaq (%rsi,%rsi,2), %rcx
197
171
; AVX-NEXT: vmovd %eax, %xmm0
198
- ; AVX-NEXT: vpinsrb $1, (%rdi,%rsi), %xmm0, %xmm0
199
- ; AVX-NEXT: vpinsrb $2, (%rdi,%rsi,2), %xmm0, %xmm0
200
- ; AVX-NEXT: leaq (%rsi,%rsi,2), %rax
201
- ; AVX-NEXT: vpinsrb $3, (%rdi,%rax), %xmm0, %xmm0
202
- ; AVX-NEXT: vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero
172
+ ; AVX-NEXT: vpinsrb $4, (%rdi,%rsi), %xmm0, %xmm0
173
+ ; AVX-NEXT: vpinsrb $8, (%rdi,%rsi,2), %xmm0, %xmm0
174
+ ; AVX-NEXT: vpinsrb $12, (%rdi,%rcx), %xmm0, %xmm0
203
175
; AVX-NEXT: vpmovzxwd {{.*#+}} xmm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero
204
176
; AVX-NEXT: vpmaddwd %xmm0, %xmm1, %xmm0
205
177
; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
@@ -311,8 +283,7 @@ define i64 @dot_ext_v2i8_v2i64(ptr %a, i64 %a_stride, ptr %b) nounwind {
311
283
; SSE4: # %bb.0:
312
284
; SSE4-NEXT: movzbl (%rdi), %eax
313
285
; SSE4-NEXT: movd %eax, %xmm0
314
- ; SSE4-NEXT: pinsrb $1, (%rdi,%rsi), %xmm0
315
- ; SSE4-NEXT: pmovzxbq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero
286
+ ; SSE4-NEXT: pinsrb $8, (%rdi,%rsi), %xmm0
316
287
; SSE4-NEXT: pmovsxbq (%rdx), %xmm1
317
288
; SSE4-NEXT: pmuldq %xmm0, %xmm1
318
289
; SSE4-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]
@@ -324,8 +295,7 @@ define i64 @dot_ext_v2i8_v2i64(ptr %a, i64 %a_stride, ptr %b) nounwind {
324
295
; AVX: # %bb.0:
325
296
; AVX-NEXT: movzbl (%rdi), %eax
326
297
; AVX-NEXT: vmovd %eax, %xmm0
327
- ; AVX-NEXT: vpinsrb $1, (%rdi,%rsi), %xmm0, %xmm0
328
- ; AVX-NEXT: vpmovzxbq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero
298
+ ; AVX-NEXT: vpinsrb $8, (%rdi,%rsi), %xmm0, %xmm0
329
299
; AVX-NEXT: vpmovsxbq (%rdx), %xmm1
330
300
; AVX-NEXT: vpmuldq %xmm0, %xmm1, %xmm0
331
301
; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
@@ -374,14 +344,13 @@ define i32 @dot_ext_v4i16_v4i32(ptr %a, i64 %a_stride, ptr %b) nounwind {
374
344
;
375
345
; SSE4-LABEL: dot_ext_v4i16_v4i32:
376
346
; SSE4: # %bb.0: # %entry
377
- ; SSE4-NEXT: leaq (%rsi,%rsi,2 ), %rax
378
- ; SSE4-NEXT: movzwl (%rdi ), %ecx
379
- ; SSE4-NEXT: movd %ecx , %xmm0
380
- ; SSE4-NEXT: pinsrw $1 , (%rdi,%rsi), %xmm0
381
- ; SSE4-NEXT: pinsrw $2 , (%rdi,%rsi,2), %xmm0
382
- ; SSE4-NEXT: pinsrw $3 , (%rdi,%rax ), %xmm0
347
+ ; SSE4-NEXT: movzwl (%rdi ), %eax
348
+ ; SSE4-NEXT: leaq (%rsi,%rsi,2 ), %rcx
349
+ ; SSE4-NEXT: movd %eax , %xmm0
350
+ ; SSE4-NEXT: pinsrw $2 , (%rdi,%rsi), %xmm0
351
+ ; SSE4-NEXT: pinsrw $4 , (%rdi,%rsi,2), %xmm0
352
+ ; SSE4-NEXT: pinsrw $6 , (%rdi,%rcx ), %xmm0
383
353
; SSE4-NEXT: pmovsxwd (%rdx), %xmm1
384
- ; SSE4-NEXT: pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
385
354
; SSE4-NEXT: pmulld %xmm0, %xmm1
386
355
; SSE4-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]
387
356
; SSE4-NEXT: paddd %xmm1, %xmm0
@@ -390,41 +359,22 @@ define i32 @dot_ext_v4i16_v4i32(ptr %a, i64 %a_stride, ptr %b) nounwind {
390
359
; SSE4-NEXT: movd %xmm1, %eax
391
360
; SSE4-NEXT: retq
392
361
;
393
- ; AVX2-LABEL: dot_ext_v4i16_v4i32:
394
- ; AVX2: # %bb.0: # %entry
395
- ; AVX2-NEXT: leaq (%rsi,%rsi,2), %rax
396
- ; AVX2-NEXT: movzwl (%rdi), %ecx
397
- ; AVX2-NEXT: vmovd %ecx, %xmm0
398
- ; AVX2-NEXT: vpinsrw $1, (%rdi,%rsi), %xmm0, %xmm0
399
- ; AVX2-NEXT: vpinsrw $2, (%rdi,%rsi,2), %xmm0, %xmm0
400
- ; AVX2-NEXT: vpinsrw $3, (%rdi,%rax), %xmm0, %xmm0
401
- ; AVX2-NEXT: vpmovsxwd (%rdx), %xmm1
402
- ; AVX2-NEXT: vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
403
- ; AVX2-NEXT: vpmulld %xmm0, %xmm1, %xmm0
404
- ; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
405
- ; AVX2-NEXT: vpaddd %xmm1, %xmm0, %xmm0
406
- ; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
407
- ; AVX2-NEXT: vpaddd %xmm1, %xmm0, %xmm0
408
- ; AVX2-NEXT: vmovd %xmm0, %eax
409
- ; AVX2-NEXT: retq
410
- ;
411
- ; AVX512-LABEL: dot_ext_v4i16_v4i32:
412
- ; AVX512: # %bb.0: # %entry
413
- ; AVX512-NEXT: leaq (%rsi,%rsi,2), %rax
414
- ; AVX512-NEXT: movzwl (%rdi), %ecx
415
- ; AVX512-NEXT: vmovd %ecx, %xmm0
416
- ; AVX512-NEXT: vpinsrw $1, (%rdi,%rsi), %xmm0, %xmm0
417
- ; AVX512-NEXT: vpinsrw $2, (%rdi,%rsi,2), %xmm0, %xmm0
418
- ; AVX512-NEXT: vpinsrw $3, (%rdi,%rax), %xmm0, %xmm0
419
- ; AVX512-NEXT: vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
420
- ; AVX512-NEXT: vpmovsxwd (%rdx), %xmm1
421
- ; AVX512-NEXT: vpmulld %xmm0, %xmm1, %xmm0
422
- ; AVX512-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
423
- ; AVX512-NEXT: vpaddd %xmm1, %xmm0, %xmm0
424
- ; AVX512-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
425
- ; AVX512-NEXT: vpaddd %xmm1, %xmm0, %xmm0
426
- ; AVX512-NEXT: vmovd %xmm0, %eax
427
- ; AVX512-NEXT: retq
362
+ ; AVX-LABEL: dot_ext_v4i16_v4i32:
363
+ ; AVX: # %bb.0: # %entry
364
+ ; AVX-NEXT: movzwl (%rdi), %eax
365
+ ; AVX-NEXT: leaq (%rsi,%rsi,2), %rcx
366
+ ; AVX-NEXT: vmovd %eax, %xmm0
367
+ ; AVX-NEXT: vpinsrw $2, (%rdi,%rsi), %xmm0, %xmm0
368
+ ; AVX-NEXT: vpinsrw $4, (%rdi,%rsi,2), %xmm0, %xmm0
369
+ ; AVX-NEXT: vpinsrw $6, (%rdi,%rcx), %xmm0, %xmm0
370
+ ; AVX-NEXT: vpmovsxwd (%rdx), %xmm1
371
+ ; AVX-NEXT: vpmulld %xmm0, %xmm1, %xmm0
372
+ ; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
373
+ ; AVX-NEXT: vpaddd %xmm1, %xmm0, %xmm0
374
+ ; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
375
+ ; AVX-NEXT: vpaddd %xmm1, %xmm0, %xmm0
376
+ ; AVX-NEXT: vmovd %xmm0, %eax
377
+ ; AVX-NEXT: retq
428
378
entry:
429
379
%var0 = load i16 , ptr %a , align 1
430
380
%arrayidx.1 = getelementptr inbounds i8 , ptr %a , i64 %a_stride
@@ -509,16 +459,15 @@ define i64 @dot_ext_v2i32_v2i64(ptr %a, i64 %a_stride, ptr %b) nounwind {
509
459
; SSE2: # %bb.0:
510
460
; SSE2-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
511
461
; SSE2-NEXT: movd {{.*#+}} xmm1 = mem[0],zero,zero,zero
512
- ; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
513
- ; SSE2-NEXT: pxor %xmm0, %xmm0
514
- ; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
515
- ; SSE2-NEXT: movq {{.*#+}} xmm2 = mem[0],zero
516
- ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[0,1,1,3]
517
- ; SSE2-NEXT: pcmpgtd %xmm2, %xmm0
518
- ; SSE2-NEXT: pmuludq %xmm1, %xmm0
519
- ; SSE2-NEXT: psllq $32, %xmm0
520
- ; SSE2-NEXT: pmuludq %xmm2, %xmm1
521
- ; SSE2-NEXT: paddq %xmm0, %xmm1
462
+ ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
463
+ ; SSE2-NEXT: movq {{.*#+}} xmm0 = mem[0],zero
464
+ ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,1,3]
465
+ ; SSE2-NEXT: pxor %xmm2, %xmm2
466
+ ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2
467
+ ; SSE2-NEXT: pmuludq %xmm1, %xmm2
468
+ ; SSE2-NEXT: psllq $32, %xmm2
469
+ ; SSE2-NEXT: pmuludq %xmm0, %xmm1
470
+ ; SSE2-NEXT: paddq %xmm2, %xmm1
522
471
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]
523
472
; SSE2-NEXT: paddq %xmm1, %xmm0
524
473
; SSE2-NEXT: movq %xmm0, %rax
@@ -560,8 +509,8 @@ define i64 @dot_ext_v2i32_v2i64(ptr %a, i64 %a_stride, ptr %b) nounwind {
560
509
; AVX512-LABEL: dot_ext_v2i32_v2i64:
561
510
; AVX512: # %bb.0:
562
511
; AVX512-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
563
- ; AVX512-NEXT: vpinsrd $1, (%rdi,%rsi), %xmm0, %xmm0
564
- ; AVX512-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0 [0],zero, xmm0[1],zero
512
+ ; AVX512-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
513
+ ; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1 [0],xmm0[0]
565
514
; AVX512-NEXT: vpmovsxdq (%rdx), %xmm1
566
515
; AVX512-NEXT: vpmullq %xmm0, %xmm1, %xmm0
567
516
; AVX512-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
0 commit comments