@@ -201,15 +201,11 @@ define <8 x i32> @combine_v8i32_abs_pos(<8 x i32> %a) {
201
201
ret <8 x i32 > %2
202
202
}
203
203
204
- ; TODO: (abs x) upper bits are known zero if x has extra sign bits
204
+ ; (abs x) upper bits are known zero if x has extra sign bits
205
205
define i32 @combine_i32_abs_zerosign (i32 %a ) {
206
206
; CHECK-LABEL: combine_i32_abs_zerosign:
207
207
; CHECK: # %bb.0:
208
- ; CHECK-NEXT: sarl $15, %edi
209
- ; CHECK-NEXT: movl %edi, %eax
210
- ; CHECK-NEXT: negl %eax
211
- ; CHECK-NEXT: cmovsl %edi, %eax
212
- ; CHECK-NEXT: andl $-524288, %eax # imm = 0xFFF80000
208
+ ; CHECK-NEXT: xorl %eax, %eax
213
209
; CHECK-NEXT: retq
214
210
%1 = ashr i32 %a , 15
215
211
%2 = call i32 @llvm.abs.i32 (i32 %1 , i1 false )
@@ -218,42 +214,15 @@ define i32 @combine_i32_abs_zerosign(i32 %a) {
218
214
}
219
215
220
216
define <8 x i16 > @combine_v8i16_abs_zerosign (<8 x i16 > %a ) {
221
- ; SSE2-LABEL: combine_v8i16_abs_zerosign:
222
- ; SSE2: # %bb.0:
223
- ; SSE2-NEXT: pmulhw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
224
- ; SSE2-NEXT: pxor %xmm1, %xmm1
225
- ; SSE2-NEXT: psubw %xmm0, %xmm1
226
- ; SSE2-NEXT: pand %xmm1, %xmm0
227
- ; SSE2-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
228
- ; SSE2-NEXT: retq
229
- ;
230
- ; SSE42-LABEL: combine_v8i16_abs_zerosign:
231
- ; SSE42: # %bb.0:
232
- ; SSE42-NEXT: pmulhw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
233
- ; SSE42-NEXT: pabsw %xmm0, %xmm0
234
- ; SSE42-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
235
- ; SSE42-NEXT: retq
236
- ;
237
- ; AVX2-LABEL: combine_v8i16_abs_zerosign:
238
- ; AVX2: # %bb.0:
239
- ; AVX2-NEXT: vpmulhw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
240
- ; AVX2-NEXT: vpabsw %xmm0, %xmm0
241
- ; AVX2-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
242
- ; AVX2-NEXT: retq
243
- ;
244
- ; AVX512F-LABEL: combine_v8i16_abs_zerosign:
245
- ; AVX512F: # %bb.0:
246
- ; AVX512F-NEXT: vpmulhw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
247
- ; AVX512F-NEXT: vpabsw %xmm0, %xmm0
248
- ; AVX512F-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
249
- ; AVX512F-NEXT: retq
217
+ ; SSE-LABEL: combine_v8i16_abs_zerosign:
218
+ ; SSE: # %bb.0:
219
+ ; SSE-NEXT: xorps %xmm0, %xmm0
220
+ ; SSE-NEXT: retq
250
221
;
251
- ; AVX512VL-LABEL: combine_v8i16_abs_zerosign:
252
- ; AVX512VL: # %bb.0:
253
- ; AVX512VL-NEXT: vpmulhw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
254
- ; AVX512VL-NEXT: vpabsw %xmm0, %xmm0
255
- ; AVX512VL-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm0
256
- ; AVX512VL-NEXT: retq
222
+ ; AVX-LABEL: combine_v8i16_abs_zerosign:
223
+ ; AVX: # %bb.0:
224
+ ; AVX-NEXT: vxorps %xmm0, %xmm0, %xmm0
225
+ ; AVX-NEXT: retq
257
226
%1 = ashr <8 x i16 > %a , <i16 7 , i16 8 , i16 9 , i16 10 , i16 11 , i16 12 , i16 13 , i16 14 >
258
227
%2 = call <8 x i16 > @llvm.abs.v8i16 (<8 x i16 > %1 , i1 false )
259
228
%3 = and <8 x i16 > %2 , <i16 32768 , i16 32768 , i16 32768 , i16 32768 , i16 32768 , i16 32768 , i16 32768 , i16 32768 >
@@ -268,7 +237,7 @@ define i32 @combine_i32_abs_zerosign_negative(i32 %a) {
268
237
; CHECK-NEXT: movl %edi, %eax
269
238
; CHECK-NEXT: negl %eax
270
239
; CHECK-NEXT: cmovsl %edi, %eax
271
- ; CHECK-NEXT: andl $-524288 , %eax # imm = 0xFFF80000
240
+ ; CHECK-NEXT: andl $536346624 , %eax # imm = 0x1FF80000
272
241
; CHECK-NEXT: retq
273
242
%1 = ashr i32 %a , 3
274
243
%2 = call i32 @llvm.abs.i32 (i32 %1 , i1 false )
0 commit comments