@@ -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+
9951040define 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