@@ -39,28 +39,24 @@ define <4 x i1> @andnot_eq_v4i32_todo_no_splat(<4 x i32> %x) nounwind {
39
39
define <4 x i1 > @andnot_eq_v4i32 (<4 x i32 > %x ) nounwind {
40
40
; AVX512-LABEL: andnot_eq_v4i32:
41
41
; AVX512: # %bb.0:
42
- ; AVX512-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
43
- ; AVX512-NEXT: vpcmpeqd %xmm1, %xmm0, %k0
44
- ; AVX512-NEXT: vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %k1
45
- ; AVX512-NEXT: korw %k1, %k0, %k1
46
- ; AVX512-NEXT: vmovdqa32 %xmm1, %xmm0 {%k1} {z}
42
+ ; AVX512-NEXT: vpandnd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm0
43
+ ; AVX512-NEXT: vpxor %xmm1, %xmm1, %xmm1
44
+ ; AVX512-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
47
45
; AVX512-NEXT: retq
48
46
;
49
47
; AVX2-LABEL: andnot_eq_v4i32:
50
48
; AVX2: # %bb.0:
51
- ; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
52
- ; AVX2-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm1
53
- ; AVX2-NEXT: vpbroadcastd {{.*#+}} xmm2 = [4294967287,4294967287,4294967287,4294967287]
54
- ; AVX2-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm0
55
- ; AVX2-NEXT: vpor %xmm0, %xmm1, %xmm0
49
+ ; AVX2-NEXT: vpbroadcastd {{.*#+}} xmm1 = [4294967287,4294967287,4294967287,4294967287]
50
+ ; AVX2-NEXT: vpandn %xmm1, %xmm0, %xmm0
51
+ ; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
52
+ ; AVX2-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
56
53
; AVX2-NEXT: retq
57
54
;
58
55
; SSE-LABEL: andnot_eq_v4i32:
59
56
; SSE: # %bb.0:
60
- ; SSE-NEXT: pcmpeqd %xmm1, %xmm1
61
- ; SSE-NEXT: pcmpeqd %xmm0, %xmm1
62
- ; SSE-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
63
- ; SSE-NEXT: por %xmm1, %xmm0
57
+ ; SSE-NEXT: pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
58
+ ; SSE-NEXT: pxor %xmm1, %xmm1
59
+ ; SSE-NEXT: pcmpeqd %xmm1, %xmm0
64
60
; SSE-NEXT: retq
65
61
%cmp1 = icmp eq <4 x i32 > %x , <i32 -1 , i32 -1 , i32 -1 , i32 -1 >
66
62
%cmp2 = icmp eq <4 x i32 > %x , <i32 -9 , i32 -9 , i32 -9 , i32 -9 >
@@ -115,41 +111,32 @@ define <2 x i1> @andnot_eq_v2i64_fail_max_not_n1(<2 x i64> %x) nounwind {
115
111
define <2 x i1 > @andnot_eq_v2i64 (<2 x i64 > %x ) nounwind {
116
112
; AVX512-LABEL: andnot_eq_v2i64:
117
113
; AVX512: # %bb.0:
118
- ; AVX512-NEXT: vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %k0
119
- ; AVX512-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
120
- ; AVX512-NEXT: vpcmpeqq %xmm1, %xmm0, %k1
121
- ; AVX512-NEXT: korw %k1, %k0, %k1
122
- ; AVX512-NEXT: vmovdqa64 %xmm1, %xmm0 {%k1} {z}
114
+ ; AVX512-NEXT: vpandnq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0
115
+ ; AVX512-NEXT: vpxor %xmm1, %xmm1, %xmm1
116
+ ; AVX512-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm0
123
117
; AVX512-NEXT: retq
124
118
;
125
119
; AVX2-LABEL: andnot_eq_v2i64:
126
120
; AVX2: # %bb.0:
127
- ; AVX2-NEXT: vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
128
- ; AVX2-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2
129
- ; AVX2-NEXT: vpcmpeqq %xmm2, %xmm0, %xmm0
130
- ; AVX2-NEXT: vpor %xmm0, %xmm1, %xmm0
121
+ ; AVX2-NEXT: vpandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
122
+ ; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
123
+ ; AVX2-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm0
131
124
; AVX2-NEXT: retq
132
125
;
133
126
; SSE41-LABEL: andnot_eq_v2i64:
134
127
; SSE41: # %bb.0:
135
- ; SSE41-NEXT: movdqa {{.*#+}} xmm1 = [18446744073709551611,18446744073709551611]
136
- ; SSE41-NEXT: pcmpeqq %xmm0, %xmm1
137
- ; SSE41-NEXT: pcmpeqd %xmm2, %xmm2
138
- ; SSE41-NEXT: pcmpeqq %xmm2, %xmm0
139
- ; SSE41-NEXT: por %xmm1, %xmm0
128
+ ; SSE41-NEXT: pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
129
+ ; SSE41-NEXT: pxor %xmm1, %xmm1
130
+ ; SSE41-NEXT: pcmpeqq %xmm1, %xmm0
140
131
; SSE41-NEXT: retq
141
132
;
142
133
; SSE2-LABEL: andnot_eq_v2i64:
143
134
; SSE2: # %bb.0:
144
- ; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [18446744073709551611,18446744073709551611]
145
- ; SSE2-NEXT: pcmpeqd %xmm0, %xmm1
146
- ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[1,0,3,2]
147
- ; SSE2-NEXT: pand %xmm1, %xmm2
148
- ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1
135
+ ; SSE2-NEXT: pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
136
+ ; SSE2-NEXT: pxor %xmm1, %xmm1
149
137
; SSE2-NEXT: pcmpeqd %xmm1, %xmm0
150
138
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]
151
139
; SSE2-NEXT: pand %xmm1, %xmm0
152
- ; SSE2-NEXT: por %xmm2, %xmm0
153
140
; SSE2-NEXT: retq
154
141
%cmp1 = icmp eq <2 x i64 > %x , <i64 -5 , i64 -5 >
155
142
%cmp2 = icmp eq <2 x i64 > %x , <i64 -1 , i64 -1 >
@@ -195,30 +182,28 @@ define <8 x i1> @andnot_ne_v8i16_todo_no_splat(<8 x i16> %x) nounwind {
195
182
define <8 x i1 > @andnot_ne_v8i16 (<8 x i16 > %x ) nounwind {
196
183
; AVX512-LABEL: andnot_ne_v8i16:
197
184
; AVX512: # %bb.0:
198
- ; AVX512-NEXT: vpcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
199
- ; AVX512-NEXT: vpcmpeqd %xmm2 , %xmm2 , %xmm2
200
- ; AVX512-NEXT: vpcmpeqw %xmm2 , %xmm0, %xmm0
201
- ; AVX512-NEXT: vpternlogq $18 , %xmm2 , %xmm1 , %xmm0
185
+ ; AVX512-NEXT: vpandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
186
+ ; AVX512-NEXT: vpxor %xmm1 , %xmm1 , %xmm1
187
+ ; AVX512-NEXT: vpcmpeqw %xmm1 , %xmm0, %xmm0
188
+ ; AVX512-NEXT: vpternlogq $15 , %xmm0 , %xmm0 , %xmm0
202
189
; AVX512-NEXT: retq
203
190
;
204
191
; AVX2-LABEL: andnot_ne_v8i16:
205
192
; AVX2: # %bb.0:
206
- ; AVX2-NEXT: vpcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
207
- ; AVX2-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2
193
+ ; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
194
+ ; AVX2-NEXT: vpandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
195
+ ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
208
196
; AVX2-NEXT: vpcmpeqw %xmm2, %xmm0, %xmm0
209
- ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm0
210
- ; AVX2-NEXT: vpandn %xmm0, %xmm1, %xmm0
197
+ ; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0
211
198
; AVX2-NEXT: retq
212
199
;
213
200
; SSE-LABEL: andnot_ne_v8i16:
214
201
; SSE: # %bb.0:
215
- ; SSE-NEXT: movdqa {{.*#+}} xmm1 = [49151,49151,49151,49151,49151,49151,49151,49151]
216
- ; SSE-NEXT: pcmpeqw %xmm0 , %xmm1
217
- ; SSE-NEXT: pcmpeqd %xmm2, %xmm2
202
+ ; SSE-NEXT: pcmpeqd % xmm1, %xmm1
203
+ ; SSE-NEXT: pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip) , %xmm0
204
+ ; SSE-NEXT: pxor %xmm2, %xmm2
218
205
; SSE-NEXT: pcmpeqw %xmm2, %xmm0
219
- ; SSE-NEXT: pxor %xmm2, %xmm0
220
- ; SSE-NEXT: pandn %xmm0, %xmm1
221
- ; SSE-NEXT: movdqa %xmm1, %xmm0
206
+ ; SSE-NEXT: pxor %xmm1, %xmm0
222
207
; SSE-NEXT: retq
223
208
%cmp1 = icmp ne <8 x i16 > %x , <i16 -16385 , i16 -16385 , i16 -16385 , i16 -16385 , i16 -16385 , i16 -16385 , i16 -16385 , i16 -16385 >
224
209
%cmp2 = icmp ne <8 x i16 > %x , <i16 -1 , i16 -1 , i16 -1 , i16 -1 , i16 -1 , i16 -1 , i16 -1 , i16 -1 >
@@ -264,30 +249,28 @@ define <16 x i1> @andnot_ne_v16i8_fail_max_not_n1(<16 x i8> %x) nounwind {
264
249
define <16 x i1 > @andnot_ne_v16i8 (<16 x i8 > %x ) nounwind {
265
250
; AVX512-LABEL: andnot_ne_v16i8:
266
251
; AVX512: # %bb.0:
267
- ; AVX512-NEXT: vpcmpeqd %xmm1 , %xmm1 , %xmm1
268
- ; AVX512-NEXT: vpcmpeqb %xmm1, %xmm0 , %xmm2
269
- ; AVX512-NEXT: vpcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip) , %xmm0, %xmm0
270
- ; AVX512-NEXT: vpternlogq $18 , %xmm1 , %xmm2 , %xmm0
252
+ ; AVX512-NEXT: vpandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip) , %xmm0 , %xmm0
253
+ ; AVX512-NEXT: vpxor %xmm1, %xmm1 , %xmm1
254
+ ; AVX512-NEXT: vpcmpeqb %xmm1 , %xmm0, %xmm0
255
+ ; AVX512-NEXT: vpternlogq $15 , %xmm0 , %xmm0 , %xmm0
271
256
; AVX512-NEXT: retq
272
257
;
273
258
; AVX2-LABEL: andnot_ne_v16i8:
274
259
; AVX2: # %bb.0:
275
260
; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
276
- ; AVX2-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm2
277
- ; AVX2-NEXT: vpcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
261
+ ; AVX2-NEXT: vpandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
262
+ ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
263
+ ; AVX2-NEXT: vpcmpeqb %xmm2, %xmm0, %xmm0
278
264
; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0
279
- ; AVX2-NEXT: vpandn %xmm0, %xmm2, %xmm0
280
265
; AVX2-NEXT: retq
281
266
;
282
267
; SSE-LABEL: andnot_ne_v16i8:
283
268
; SSE: # %bb.0:
284
- ; SSE-NEXT: pcmpeqd %xmm2, %xmm2
285
- ; SSE-NEXT: movdqa %xmm0, %xmm1
286
- ; SSE-NEXT: pcmpeqb %xmm2, %xmm1
287
- ; SSE-NEXT: pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
288
- ; SSE-NEXT: pxor %xmm2, %xmm0
289
- ; SSE-NEXT: pandn %xmm0, %xmm1
290
- ; SSE-NEXT: movdqa %xmm1, %xmm0
269
+ ; SSE-NEXT: pcmpeqd %xmm1, %xmm1
270
+ ; SSE-NEXT: pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
271
+ ; SSE-NEXT: pxor %xmm2, %xmm2
272
+ ; SSE-NEXT: pcmpeqb %xmm2, %xmm0
273
+ ; SSE-NEXT: pxor %xmm1, %xmm0
291
274
; SSE-NEXT: retq
292
275
%cmp1 = icmp ne <16 x i8 > %x , <i8 -1 , i8 -1 , i8 -1 , i8 -1 , i8 -1 , i8 -1 , i8 -1 , i8 -1 , i8 -1 , i8 -1 , i8 -1 , i8 -1 , i8 -1 , i8 -1 , i8 -1 , i8 -1 >
293
276
%cmp2 = icmp ne <16 x i8 > %x , <i8 -33 , i8 -33 , i8 -33 , i8 -33 , i8 -33 , i8 -33 , i8 -33 , i8 -33 , i8 -33 , i8 -33 , i8 -33 , i8 -33 , i8 -33 , i8 -33 , i8 -33 , i8 -33 >
0 commit comments