@@ -11,35 +11,29 @@ define <8 x i16> @pow2_mask_v16i8(i8 zeroext %0) {
11
11
; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
12
12
; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
13
13
; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
14
- ; SSE2-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
15
- ; SSE2-NEXT: pxor %xmm1, %xmm1
16
- ; SSE2-NEXT: pcmpeqb %xmm0, %xmm1
17
- ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0
18
- ; SSE2-NEXT: pxor %xmm1, %xmm0
14
+ ; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [128,128,64,64,32,32,16,16,8,8,4,4,2,2,1,1]
15
+ ; SSE2-NEXT: pand %xmm1, %xmm0
16
+ ; SSE2-NEXT: pcmpeqb %xmm1, %xmm0
19
17
; SSE2-NEXT: retq
20
18
;
21
19
; SSE41-LABEL: pow2_mask_v16i8:
22
20
; SSE41: # %bb.0:
23
21
; SSE41-NEXT: movd %edi, %xmm0
24
22
; SSE41-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
25
23
; SSE41-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
26
- ; SSE41-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
27
- ; SSE41-NEXT: pxor %xmm1, %xmm1
28
- ; SSE41-NEXT: pcmpeqb %xmm0, %xmm1
29
- ; SSE41-NEXT: pcmpeqd %xmm0, %xmm0
30
- ; SSE41-NEXT: pxor %xmm1, %xmm0
24
+ ; SSE41-NEXT: movdqa {{.*#+}} xmm1 = [128,64,32,16,8,4,2,1,u,u,u,u,u,u,u,u]
25
+ ; SSE41-NEXT: pand %xmm1, %xmm0
26
+ ; SSE41-NEXT: pcmpeqb %xmm1, %xmm0
31
27
; SSE41-NEXT: pmovsxbw %xmm0, %xmm0
32
28
; SSE41-NEXT: retq
33
29
;
34
30
; AVX2-LABEL: pow2_mask_v16i8:
35
31
; AVX2: # %bb.0:
36
32
; AVX2-NEXT: vmovd %edi, %xmm0
37
33
; AVX2-NEXT: vpbroadcastb %xmm0, %xmm0
38
- ; AVX2-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
39
- ; AVX2-NEXT: vpxor %xmm1, %xmm1 , %xmm1
34
+ ; AVX2-NEXT: vpbroadcastq {{.*#+}} xmm1 = [128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1]
35
+ ; AVX2-NEXT: vpand %xmm1, %xmm0 , %xmm0
40
36
; AVX2-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0
41
- ; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
42
- ; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0
43
37
; AVX2-NEXT: vpmovsxbw %xmm0, %xmm0
44
38
; AVX2-NEXT: retq
45
39
;
@@ -103,33 +97,28 @@ define i64 @pow2_mask_v8i8(i8 zeroext %0) {
103
97
; SSE-NEXT: movd %edi, %xmm0
104
98
; SSE-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
105
99
; SSE-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
106
- ; SSE-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
107
- ; SSE-NEXT: pxor %xmm1, %xmm1
108
- ; SSE-NEXT: pcmpeqb %xmm0, %xmm1
109
- ; SSE-NEXT: pcmpeqd %xmm0, %xmm0
110
- ; SSE-NEXT: pxor %xmm1, %xmm0
100
+ ; SSE-NEXT: movdqa {{.*#+}} xmm1 = [128,64,32,16,8,4,2,1,u,u,u,u,u,u,u,u]
101
+ ; SSE-NEXT: pand %xmm1, %xmm0
102
+ ; SSE-NEXT: pcmpeqb %xmm1, %xmm0
111
103
; SSE-NEXT: movq %xmm0, %rax
112
104
; SSE-NEXT: retq
113
105
;
114
106
; AVX2-LABEL: pow2_mask_v8i8:
115
107
; AVX2: # %bb.0:
116
108
; AVX2-NEXT: vmovd %edi, %xmm0
117
109
; AVX2-NEXT: vpbroadcastb %xmm0, %xmm0
118
- ; AVX2-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
119
- ; AVX2-NEXT: vpxor %xmm1, %xmm1 , %xmm1
110
+ ; AVX2-NEXT: vpbroadcastq {{.*#+}} xmm1 = [128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1]
111
+ ; AVX2-NEXT: vpand %xmm1, %xmm0 , %xmm0
120
112
; AVX2-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0
121
- ; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
122
- ; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0
123
113
; AVX2-NEXT: vmovq %xmm0, %rax
124
114
; AVX2-NEXT: retq
125
115
;
126
116
; AVX512-LABEL: pow2_mask_v8i8:
127
117
; AVX512: # %bb.0:
128
118
; AVX512-NEXT: vpbroadcastb %edi, %xmm0
129
- ; AVX512-NEXT: vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0
130
- ; AVX512-NEXT: vpxor %xmm1, %xmm1 , %xmm1
119
+ ; AVX512-NEXT: vpbroadcastq {{.*#+}} xmm1 = [128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1]
120
+ ; AVX512-NEXT: vpand %xmm1, %xmm0 , %xmm0
131
121
; AVX512-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0
132
- ; AVX512-NEXT: vpternlogq $15, %xmm0, %xmm0, %xmm0
133
122
; AVX512-NEXT: vmovq %xmm0, %rax
134
123
; AVX512-NEXT: retq
135
124
%vec = insertelement <1 x i8 > poison, i8 %0 , i64 0
0 commit comments