Skip to content

Commit 245b71c

Browse files
RKSimonaokblast
authored andcommitted
[X86] vector-reduce-or-cmp.ll - add v4i64 signbit test coverage (llvm#165588)
Missing fold to make use of VTESTPD
1 parent 950a029 commit 245b71c

File tree

1 file changed

+57
-12
lines changed

1 file changed

+57
-12
lines changed

llvm/test/CodeGen/X86/vector-reduce-or-cmp.ll

Lines changed: 57 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -992,6 +992,51 @@ define i1 @signtest_v8i32(<8 x i32> %a0) {
992992
ret i1 %2
993993
}
994994

995+
define i1 @signtest_v4i64(<4 x i64> %a0) {
996+
; SSE2-LABEL: signtest_v4i64:
997+
; SSE2: # %bb.0:
998+
; SSE2-NEXT: por %xmm1, %xmm0
999+
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
1000+
; SSE2-NEXT: por %xmm0, %xmm1
1001+
; SSE2-NEXT: movq %xmm1, %rax
1002+
; SSE2-NEXT: testq %rax, %rax
1003+
; SSE2-NEXT: setns %al
1004+
; SSE2-NEXT: retq
1005+
;
1006+
; SSE41-LABEL: signtest_v4i64:
1007+
; SSE41: # %bb.0:
1008+
; SSE41-NEXT: por %xmm1, %xmm0
1009+
; SSE41-NEXT: ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1010+
; SSE41-NEXT: sete %al
1011+
; SSE41-NEXT: retq
1012+
;
1013+
; AVX1-LABEL: signtest_v4i64:
1014+
; AVX1: # %bb.0:
1015+
; AVX1-NEXT: vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0
1016+
; AVX1-NEXT: sete %al
1017+
; AVX1-NEXT: vzeroupper
1018+
; AVX1-NEXT: retq
1019+
;
1020+
; AVX2-LABEL: signtest_v4i64:
1021+
; AVX2: # %bb.0:
1022+
; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
1023+
; AVX2-NEXT: vptest %ymm1, %ymm0
1024+
; AVX2-NEXT: sete %al
1025+
; AVX2-NEXT: vzeroupper
1026+
; AVX2-NEXT: retq
1027+
;
1028+
; AVX512-LABEL: signtest_v4i64:
1029+
; AVX512: # %bb.0:
1030+
; AVX512-NEXT: vpbroadcastq {{.*#+}} ymm1 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
1031+
; AVX512-NEXT: vptest %ymm1, %ymm0
1032+
; AVX512-NEXT: sete %al
1033+
; AVX512-NEXT: vzeroupper
1034+
; AVX512-NEXT: retq
1035+
%1 = call i64 @llvm.vector.reduce.or.v4i64(<4 x i64> %a0)
1036+
%2 = icmp sgt i64 %1, -1
1037+
ret i1 %2
1038+
}
1039+
9951040
define i1 @trunc_v16i16(<16 x i16> %a0) {
9961041
; SSE2-LABEL: trunc_v16i16:
9971042
; SSE2: # %bb.0:
@@ -1162,11 +1207,11 @@ define i32 @mask_v3i1(<3 x i32> %a, <3 x i32> %b) {
11621207
; SSE2-NEXT: movd %xmm0, %eax
11631208
; SSE2-NEXT: orl %ecx, %eax
11641209
; SSE2-NEXT: testb $1, %al
1165-
; SSE2-NEXT: je .LBB29_2
1210+
; SSE2-NEXT: je .LBB30_2
11661211
; SSE2-NEXT: # %bb.1:
11671212
; SSE2-NEXT: xorl %eax, %eax
11681213
; SSE2-NEXT: retq
1169-
; SSE2-NEXT: .LBB29_2:
1214+
; SSE2-NEXT: .LBB30_2:
11701215
; SSE2-NEXT: movl $1, %eax
11711216
; SSE2-NEXT: retq
11721217
;
@@ -1181,11 +1226,11 @@ define i32 @mask_v3i1(<3 x i32> %a, <3 x i32> %b) {
11811226
; SSE41-NEXT: pextrd $2, %xmm1, %eax
11821227
; SSE41-NEXT: orl %ecx, %eax
11831228
; SSE41-NEXT: testb $1, %al
1184-
; SSE41-NEXT: je .LBB29_2
1229+
; SSE41-NEXT: je .LBB30_2
11851230
; SSE41-NEXT: # %bb.1:
11861231
; SSE41-NEXT: xorl %eax, %eax
11871232
; SSE41-NEXT: retq
1188-
; SSE41-NEXT: .LBB29_2:
1233+
; SSE41-NEXT: .LBB30_2:
11891234
; SSE41-NEXT: movl $1, %eax
11901235
; SSE41-NEXT: retq
11911236
;
@@ -1200,11 +1245,11 @@ define i32 @mask_v3i1(<3 x i32> %a, <3 x i32> %b) {
12001245
; AVX1OR2-NEXT: vpextrd $2, %xmm0, %eax
12011246
; AVX1OR2-NEXT: orl %ecx, %eax
12021247
; AVX1OR2-NEXT: testb $1, %al
1203-
; AVX1OR2-NEXT: je .LBB29_2
1248+
; AVX1OR2-NEXT: je .LBB30_2
12041249
; AVX1OR2-NEXT: # %bb.1:
12051250
; AVX1OR2-NEXT: xorl %eax, %eax
12061251
; AVX1OR2-NEXT: retq
1207-
; AVX1OR2-NEXT: .LBB29_2:
1252+
; AVX1OR2-NEXT: .LBB30_2:
12081253
; AVX1OR2-NEXT: movl $1, %eax
12091254
; AVX1OR2-NEXT: retq
12101255
;
@@ -1219,12 +1264,12 @@ define i32 @mask_v3i1(<3 x i32> %a, <3 x i32> %b) {
12191264
; AVX512F-NEXT: korw %k0, %k1, %k0
12201265
; AVX512F-NEXT: kmovw %k0, %eax
12211266
; AVX512F-NEXT: testb $1, %al
1222-
; AVX512F-NEXT: je .LBB29_2
1267+
; AVX512F-NEXT: je .LBB30_2
12231268
; AVX512F-NEXT: # %bb.1:
12241269
; AVX512F-NEXT: xorl %eax, %eax
12251270
; AVX512F-NEXT: vzeroupper
12261271
; AVX512F-NEXT: retq
1227-
; AVX512F-NEXT: .LBB29_2:
1272+
; AVX512F-NEXT: .LBB30_2:
12281273
; AVX512F-NEXT: movl $1, %eax
12291274
; AVX512F-NEXT: vzeroupper
12301275
; AVX512F-NEXT: retq
@@ -1240,12 +1285,12 @@ define i32 @mask_v3i1(<3 x i32> %a, <3 x i32> %b) {
12401285
; AVX512BW-NEXT: korw %k0, %k1, %k0
12411286
; AVX512BW-NEXT: kmovd %k0, %eax
12421287
; AVX512BW-NEXT: testb $1, %al
1243-
; AVX512BW-NEXT: je .LBB29_2
1288+
; AVX512BW-NEXT: je .LBB30_2
12441289
; AVX512BW-NEXT: # %bb.1:
12451290
; AVX512BW-NEXT: xorl %eax, %eax
12461291
; AVX512BW-NEXT: vzeroupper
12471292
; AVX512BW-NEXT: retq
1248-
; AVX512BW-NEXT: .LBB29_2:
1293+
; AVX512BW-NEXT: .LBB30_2:
12491294
; AVX512BW-NEXT: movl $1, %eax
12501295
; AVX512BW-NEXT: vzeroupper
12511296
; AVX512BW-NEXT: retq
@@ -1259,11 +1304,11 @@ define i32 @mask_v3i1(<3 x i32> %a, <3 x i32> %b) {
12591304
; AVX512BWVL-NEXT: korw %k0, %k1, %k0
12601305
; AVX512BWVL-NEXT: kmovd %k0, %eax
12611306
; AVX512BWVL-NEXT: testb $1, %al
1262-
; AVX512BWVL-NEXT: je .LBB29_2
1307+
; AVX512BWVL-NEXT: je .LBB30_2
12631308
; AVX512BWVL-NEXT: # %bb.1:
12641309
; AVX512BWVL-NEXT: xorl %eax, %eax
12651310
; AVX512BWVL-NEXT: retq
1266-
; AVX512BWVL-NEXT: .LBB29_2:
1311+
; AVX512BWVL-NEXT: .LBB30_2:
12671312
; AVX512BWVL-NEXT: movl $1, %eax
12681313
; AVX512BWVL-NEXT: retq
12691314
%1 = icmp ne <3 x i32> %a, %b

0 commit comments

Comments
 (0)