@@ -37,18 +37,16 @@ define i32 @movmsk_slt_v2i64_1(<2 x i64> %v, i32 %a, i32 %b) {
37
37
; SSE: # %bb.0:
38
38
; SSE-NEXT: movl %edi, %eax
39
39
; SSE-NEXT: movmskpd %xmm0, %ecx
40
- ; SSE-NEXT: shlb $6, %cl
41
- ; SSE-NEXT: sarb $6, %cl
42
- ; SSE-NEXT: cmovnsl %esi, %eax
40
+ ; SSE-NEXT: testb $2, %cl
41
+ ; SSE-NEXT: cmovel %esi, %eax
43
42
; SSE-NEXT: retq
44
43
;
45
44
; AVX-LABEL: movmsk_slt_v2i64_1:
46
45
; AVX: # %bb.0:
47
46
; AVX-NEXT: movl %edi, %eax
48
47
; AVX-NEXT: vmovmskpd %xmm0, %ecx
49
- ; AVX-NEXT: shlb $6, %cl
50
- ; AVX-NEXT: sarb $6, %cl
51
- ; AVX-NEXT: cmovnsl %esi, %eax
48
+ ; AVX-NEXT: testb $2, %cl
49
+ ; AVX-NEXT: cmovel %esi, %eax
52
50
; AVX-NEXT: retq
53
51
%cmp = icmp slt <2 x i64 > %v , zeroinitializer
54
52
%msk = bitcast <2 x i1 > %cmp to i2
@@ -62,18 +60,16 @@ define i32 @movmsk_sgt_v2i64_1(<2 x i64> %v, i32 %a, i32 %b) {
62
60
; SSE: # %bb.0:
63
61
; SSE-NEXT: movl %edi, %eax
64
62
; SSE-NEXT: movmskpd %xmm0, %ecx
65
- ; SSE-NEXT: shlb $6, %cl
66
- ; SSE-NEXT: sarb $6, %cl
67
- ; SSE-NEXT: cmovsl %esi, %eax
63
+ ; SSE-NEXT: testb $2, %cl
64
+ ; SSE-NEXT: cmovnel %esi, %eax
68
65
; SSE-NEXT: retq
69
66
;
70
67
; AVX-LABEL: movmsk_sgt_v2i64_1:
71
68
; AVX: # %bb.0:
72
69
; AVX-NEXT: movl %edi, %eax
73
70
; AVX-NEXT: vmovmskpd %xmm0, %ecx
74
- ; AVX-NEXT: shlb $6, %cl
75
- ; AVX-NEXT: sarb $6, %cl
76
- ; AVX-NEXT: cmovsl %esi, %eax
71
+ ; AVX-NEXT: testb $2, %cl
72
+ ; AVX-NEXT: cmovnel %esi, %eax
77
73
; AVX-NEXT: retq
78
74
%cmp = icmp slt <2 x i64 > %v , zeroinitializer
79
75
%msk = bitcast <2 x i1 > %cmp to i2
@@ -111,18 +107,16 @@ define i32 @movmsk_slt_v4i32_3(<4 x i32> %v, i32 %a, i32 %b) {
111
107
; SSE: # %bb.0:
112
108
; SSE-NEXT: movl %edi, %eax
113
109
; SSE-NEXT: movmskps %xmm0, %ecx
114
- ; SSE-NEXT: shlb $4, %cl
115
- ; SSE-NEXT: sarb $4, %cl
116
- ; SSE-NEXT: cmovnsl %esi, %eax
110
+ ; SSE-NEXT: testb $8, %cl
111
+ ; SSE-NEXT: cmovel %esi, %eax
117
112
; SSE-NEXT: retq
118
113
;
119
114
; AVX-LABEL: movmsk_slt_v4i32_3:
120
115
; AVX: # %bb.0:
121
116
; AVX-NEXT: movl %edi, %eax
122
117
; AVX-NEXT: vmovmskps %xmm0, %ecx
123
- ; AVX-NEXT: shlb $4, %cl
124
- ; AVX-NEXT: sarb $4, %cl
125
- ; AVX-NEXT: cmovnsl %esi, %eax
118
+ ; AVX-NEXT: testb $8, %cl
119
+ ; AVX-NEXT: cmovel %esi, %eax
126
120
; AVX-NEXT: retq
127
121
%cmp = icmp slt <4 x i32 > %v , zeroinitializer
128
122
%msk = bitcast <4 x i1 > %cmp to i4
@@ -136,18 +130,16 @@ define i32 @movmsk_sgt_v4i32_3(<4 x i32> %v, i32 %a, i32 %b) {
136
130
; SSE: # %bb.0:
137
131
; SSE-NEXT: movl %edi, %eax
138
132
; SSE-NEXT: movmskps %xmm0, %ecx
139
- ; SSE-NEXT: shlb $4, %cl
140
- ; SSE-NEXT: sarb $4, %cl
141
- ; SSE-NEXT: cmovsl %esi, %eax
133
+ ; SSE-NEXT: testb $8, %cl
134
+ ; SSE-NEXT: cmovnel %esi, %eax
142
135
; SSE-NEXT: retq
143
136
;
144
137
; AVX-LABEL: movmsk_sgt_v4i32_3:
145
138
; AVX: # %bb.0:
146
139
; AVX-NEXT: movl %edi, %eax
147
140
; AVX-NEXT: vmovmskps %xmm0, %ecx
148
- ; AVX-NEXT: shlb $4, %cl
149
- ; AVX-NEXT: sarb $4, %cl
150
- ; AVX-NEXT: cmovsl %esi, %eax
141
+ ; AVX-NEXT: testb $8, %cl
142
+ ; AVX-NEXT: cmovnel %esi, %eax
151
143
; AVX-NEXT: retq
152
144
%cmp = icmp slt <4 x i32 > %v , zeroinitializer
153
145
%msk = bitcast <4 x i1 > %cmp to i4
@@ -256,20 +248,17 @@ define i32 @movmsk_slt_v4i64_3(<4 x i64> %v, i32 %a, i32 %b) {
256
248
; SSE-LABEL: movmsk_slt_v4i64_3:
257
249
; SSE: # %bb.0:
258
250
; SSE-NEXT: movl %edi, %eax
259
- ; SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,3],xmm1[1,3]
260
- ; SSE-NEXT: movmskps %xmm0, %ecx
261
- ; SSE-NEXT: shlb $4, %cl
262
- ; SSE-NEXT: sarb $4, %cl
263
- ; SSE-NEXT: cmovnsl %esi, %eax
251
+ ; SSE-NEXT: movmskps %xmm1, %ecx
252
+ ; SSE-NEXT: testb $8, %cl
253
+ ; SSE-NEXT: cmovel %esi, %eax
264
254
; SSE-NEXT: retq
265
255
;
266
256
; AVX-LABEL: movmsk_slt_v4i64_3:
267
257
; AVX: # %bb.0:
268
258
; AVX-NEXT: movl %edi, %eax
269
259
; AVX-NEXT: vmovmskpd %ymm0, %ecx
270
- ; AVX-NEXT: shlb $4, %cl
271
- ; AVX-NEXT: sarb $4, %cl
272
- ; AVX-NEXT: cmovnsl %esi, %eax
260
+ ; AVX-NEXT: testb $8, %cl
261
+ ; AVX-NEXT: cmovel %esi, %eax
273
262
; AVX-NEXT: vzeroupper
274
263
; AVX-NEXT: retq
275
264
%cmp = icmp slt <4 x i64 > %v , zeroinitializer
@@ -283,20 +272,17 @@ define i32 @movmsk_sgt_v4i64_3(<4 x i64> %v, i32 %a, i32 %b) {
283
272
; SSE-LABEL: movmsk_sgt_v4i64_3:
284
273
; SSE: # %bb.0:
285
274
; SSE-NEXT: movl %edi, %eax
286
- ; SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,3],xmm1[1,3]
287
- ; SSE-NEXT: movmskps %xmm0, %ecx
288
- ; SSE-NEXT: shlb $4, %cl
289
- ; SSE-NEXT: sarb $4, %cl
290
- ; SSE-NEXT: cmovsl %esi, %eax
275
+ ; SSE-NEXT: movmskps %xmm1, %ecx
276
+ ; SSE-NEXT: testb $8, %cl
277
+ ; SSE-NEXT: cmovnel %esi, %eax
291
278
; SSE-NEXT: retq
292
279
;
293
280
; AVX-LABEL: movmsk_sgt_v4i64_3:
294
281
; AVX: # %bb.0:
295
282
; AVX-NEXT: movl %edi, %eax
296
283
; AVX-NEXT: vmovmskpd %ymm0, %ecx
297
- ; AVX-NEXT: shlb $4, %cl
298
- ; AVX-NEXT: sarb $4, %cl
299
- ; AVX-NEXT: cmovsl %esi, %eax
284
+ ; AVX-NEXT: testb $8, %cl
285
+ ; AVX-NEXT: cmovnel %esi, %eax
300
286
; AVX-NEXT: vzeroupper
301
287
; AVX-NEXT: retq
302
288
%cmp = icmp slt <4 x i64 > %v , zeroinitializer
@@ -487,22 +473,18 @@ define i32 @movmsk_slt_v32i8_31(<32 x i8> %v, i32 %a, i32 %b) {
487
473
; SSE-LABEL: movmsk_slt_v32i8_31:
488
474
; SSE: # %bb.0:
489
475
; SSE-NEXT: movl %edi, %eax
490
- ; SSE-NEXT: pmovmskb %xmm0, %ecx
491
- ; SSE-NEXT: pmovmskb %xmm1, %edx
492
- ; SSE-NEXT: shll $16, %edx
493
- ; SSE-NEXT: orl %ecx, %edx
494
- ; SSE-NEXT: cmovnsl %esi, %eax
476
+ ; SSE-NEXT: pmovmskb %xmm1, %ecx
477
+ ; SSE-NEXT: testl $32768, %ecx # imm = 0x8000
478
+ ; SSE-NEXT: cmovel %esi, %eax
495
479
; SSE-NEXT: retq
496
480
;
497
481
; AVX1-LABEL: movmsk_slt_v32i8_31:
498
482
; AVX1: # %bb.0:
499
483
; AVX1-NEXT: movl %edi, %eax
500
- ; AVX1-NEXT: vpmovmskb %xmm0, %ecx
501
484
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
502
- ; AVX1-NEXT: vpmovmskb %xmm0, %edx
503
- ; AVX1-NEXT: shll $16, %edx
504
- ; AVX1-NEXT: orl %ecx, %edx
505
- ; AVX1-NEXT: cmovnsl %esi, %eax
485
+ ; AVX1-NEXT: vpmovmskb %xmm0, %ecx
486
+ ; AVX1-NEXT: testl $32768, %ecx # imm = 0x8000
487
+ ; AVX1-NEXT: cmovel %esi, %eax
506
488
; AVX1-NEXT: vzeroupper
507
489
; AVX1-NEXT: retq
508
490
;
@@ -534,22 +516,18 @@ define i32 @movmsk_sgt_v32i8_31(<32 x i8> %v, i32 %a, i32 %b) {
534
516
; SSE-LABEL: movmsk_sgt_v32i8_31:
535
517
; SSE: # %bb.0:
536
518
; SSE-NEXT: movl %edi, %eax
537
- ; SSE-NEXT: pmovmskb %xmm0, %ecx
538
- ; SSE-NEXT: pmovmskb %xmm1, %edx
539
- ; SSE-NEXT: shll $16, %edx
540
- ; SSE-NEXT: orl %ecx, %edx
541
- ; SSE-NEXT: cmovsl %esi, %eax
519
+ ; SSE-NEXT: pmovmskb %xmm1, %ecx
520
+ ; SSE-NEXT: testl $32768, %ecx # imm = 0x8000
521
+ ; SSE-NEXT: cmovnel %esi, %eax
542
522
; SSE-NEXT: retq
543
523
;
544
524
; AVX1-LABEL: movmsk_sgt_v32i8_31:
545
525
; AVX1: # %bb.0:
546
526
; AVX1-NEXT: movl %edi, %eax
547
- ; AVX1-NEXT: vpmovmskb %xmm0, %ecx
548
527
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
549
- ; AVX1-NEXT: vpmovmskb %xmm0, %edx
550
- ; AVX1-NEXT: shll $16, %edx
551
- ; AVX1-NEXT: orl %ecx, %edx
552
- ; AVX1-NEXT: cmovsl %esi, %eax
528
+ ; AVX1-NEXT: vpmovmskb %xmm0, %ecx
529
+ ; AVX1-NEXT: testl $32768, %ecx # imm = 0x8000
530
+ ; AVX1-NEXT: cmovnel %esi, %eax
553
531
; AVX1-NEXT: vzeroupper
554
532
; AVX1-NEXT: retq
555
533
;
0 commit comments