1265 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefixes=SSE,X86-SSE3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefixes=SSE,X64-SSE4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefixes=SSE,X64-SSE5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX16; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX27; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw | FileCheck %s --check-prefixes=AVX,AVX5128; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw,+avx512vl | FileCheck %s --check-prefixes=AVX,AVX5129 10;11; vXi6412;13 14define i64 @test_v2i64(<2 x i64> %a0) nounwind {15; X86-SSE-LABEL: test_v2i64:16; X86-SSE: # %bb.0:17; X86-SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]18; X86-SSE-NEXT: pxor %xmm0, %xmm119; X86-SSE-NEXT: movd %xmm1, %eax20; X86-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]21; X86-SSE-NEXT: movd %xmm0, %edx22; X86-SSE-NEXT: retl23;24; X64-SSE-LABEL: test_v2i64:25; X64-SSE: # %bb.0:26; X64-SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]27; X64-SSE-NEXT: pxor %xmm0, %xmm128; X64-SSE-NEXT: movq %xmm1, %rax29; X64-SSE-NEXT: retq30;31; AVX-LABEL: test_v2i64:32; AVX: # %bb.0:33; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]34; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm035; AVX-NEXT: vmovq %xmm0, %rax36; AVX-NEXT: retq37 %1 = call i64 @llvm.vector.reduce.xor.v2i64(<2 x i64> %a0)38 ret i64 %139}40 41define i64 @test_v4i64(<4 x i64> %a0) nounwind {42; X86-SSE-LABEL: test_v4i64:43; X86-SSE: # %bb.0:44; X86-SSE-NEXT: pxor %xmm1, %xmm045; X86-SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]46; X86-SSE-NEXT: pxor %xmm0, %xmm147; X86-SSE-NEXT: movd %xmm1, %eax48; X86-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]49; X86-SSE-NEXT: movd %xmm0, %edx50; X86-SSE-NEXT: retl51;52; X64-SSE-LABEL: test_v4i64:53; X64-SSE: # %bb.0:54; X64-SSE-NEXT: pxor %xmm1, %xmm055; X64-SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]56; X64-SSE-NEXT: pxor %xmm0, %xmm157; X64-SSE-NEXT: movq %xmm1, %rax58; X64-SSE-NEXT: retq59;60; AVX1-LABEL: test_v4i64:61; AVX1: # %bb.0:62; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm163; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm064; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]65; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm066; AVX1-NEXT: vmovq %xmm0, %rax67; AVX1-NEXT: vzeroupper68; AVX1-NEXT: retq69;70; AVX2-LABEL: test_v4i64:71; AVX2: # %bb.0:72; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm173; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm074; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]75; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm076; AVX2-NEXT: vmovq %xmm0, %rax77; AVX2-NEXT: vzeroupper78; AVX2-NEXT: retq79;80; AVX512-LABEL: test_v4i64:81; AVX512: # %bb.0:82; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm183; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm084; AVX512-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]85; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm086; AVX512-NEXT: vmovq %xmm0, %rax87; AVX512-NEXT: vzeroupper88; AVX512-NEXT: retq89 %1 = call i64 @llvm.vector.reduce.xor.v4i64(<4 x i64> %a0)90 ret i64 %191}92 93define i64 @test_v8i64(<8 x i64> %a0) nounwind {94; X86-SSE-LABEL: test_v8i64:95; X86-SSE: # %bb.0:96; X86-SSE-NEXT: pushl %ebp97; X86-SSE-NEXT: movl %esp, %ebp98; X86-SSE-NEXT: andl $-16, %esp99; X86-SSE-NEXT: subl $16, %esp100; X86-SSE-NEXT: pxor %xmm2, %xmm0101; X86-SSE-NEXT: pxor 8(%ebp), %xmm1102; X86-SSE-NEXT: pxor %xmm0, %xmm1103; X86-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]104; X86-SSE-NEXT: pxor %xmm1, %xmm0105; X86-SSE-NEXT: movd %xmm0, %eax106; X86-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]107; X86-SSE-NEXT: movd %xmm0, %edx108; X86-SSE-NEXT: movl %ebp, %esp109; X86-SSE-NEXT: popl %ebp110; X86-SSE-NEXT: retl111;112; X64-SSE-LABEL: test_v8i64:113; X64-SSE: # %bb.0:114; X64-SSE-NEXT: pxor %xmm3, %xmm1115; X64-SSE-NEXT: pxor %xmm2, %xmm0116; X64-SSE-NEXT: pxor %xmm1, %xmm0117; X64-SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]118; X64-SSE-NEXT: pxor %xmm0, %xmm1119; X64-SSE-NEXT: movq %xmm1, %rax120; X64-SSE-NEXT: retq121;122; AVX1-LABEL: test_v8i64:123; AVX1: # %bb.0:124; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm0125; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1126; AVX1-NEXT: vxorps %xmm1, %xmm0, %xmm0127; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[2,3,2,3]128; AVX1-NEXT: vxorps %xmm1, %xmm0, %xmm0129; AVX1-NEXT: vmovq %xmm0, %rax130; AVX1-NEXT: vzeroupper131; AVX1-NEXT: retq132;133; AVX2-LABEL: test_v8i64:134; AVX2: # %bb.0:135; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0136; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1137; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0138; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]139; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0140; AVX2-NEXT: vmovq %xmm0, %rax141; AVX2-NEXT: vzeroupper142; AVX2-NEXT: retq143;144; AVX512-LABEL: test_v8i64:145; AVX512: # %bb.0:146; AVX512-NEXT: vextracti64x4 $1, %zmm0, %ymm1147; AVX512-NEXT: vpxorq %zmm1, %zmm0, %zmm0148; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm1149; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm0150; AVX512-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]151; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm0152; AVX512-NEXT: vmovq %xmm0, %rax153; AVX512-NEXT: vzeroupper154; AVX512-NEXT: retq155 %1 = call i64 @llvm.vector.reduce.xor.v8i64(<8 x i64> %a0)156 ret i64 %1157}158 159define i64 @test_v16i64(<16 x i64> %a0) nounwind {160; X86-SSE-LABEL: test_v16i64:161; X86-SSE: # %bb.0:162; X86-SSE-NEXT: pushl %ebp163; X86-SSE-NEXT: movl %esp, %ebp164; X86-SSE-NEXT: andl $-16, %esp165; X86-SSE-NEXT: subl $16, %esp166; X86-SSE-NEXT: movdqa 8(%ebp), %xmm3167; X86-SSE-NEXT: pxor 56(%ebp), %xmm2168; X86-SSE-NEXT: pxor 24(%ebp), %xmm0169; X86-SSE-NEXT: pxor %xmm2, %xmm0170; X86-SSE-NEXT: pxor 72(%ebp), %xmm3171; X86-SSE-NEXT: pxor 40(%ebp), %xmm1172; X86-SSE-NEXT: pxor %xmm3, %xmm1173; X86-SSE-NEXT: pxor %xmm0, %xmm1174; X86-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]175; X86-SSE-NEXT: pxor %xmm1, %xmm0176; X86-SSE-NEXT: movd %xmm0, %eax177; X86-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]178; X86-SSE-NEXT: movd %xmm0, %edx179; X86-SSE-NEXT: movl %ebp, %esp180; X86-SSE-NEXT: popl %ebp181; X86-SSE-NEXT: retl182;183; X64-SSE-LABEL: test_v16i64:184; X64-SSE: # %bb.0:185; X64-SSE-NEXT: pxor %xmm6, %xmm2186; X64-SSE-NEXT: pxor %xmm4, %xmm0187; X64-SSE-NEXT: pxor %xmm2, %xmm0188; X64-SSE-NEXT: pxor %xmm7, %xmm3189; X64-SSE-NEXT: pxor %xmm5, %xmm1190; X64-SSE-NEXT: pxor %xmm3, %xmm1191; X64-SSE-NEXT: pxor %xmm0, %xmm1192; X64-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]193; X64-SSE-NEXT: pxor %xmm1, %xmm0194; X64-SSE-NEXT: movq %xmm0, %rax195; X64-SSE-NEXT: retq196;197; AVX1-LABEL: test_v16i64:198; AVX1: # %bb.0:199; AVX1-NEXT: vxorps %ymm3, %ymm1, %ymm1200; AVX1-NEXT: vxorps %ymm2, %ymm0, %ymm0201; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm0202; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1203; AVX1-NEXT: vxorps %xmm1, %xmm0, %xmm0204; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[2,3,2,3]205; AVX1-NEXT: vxorps %xmm1, %xmm0, %xmm0206; AVX1-NEXT: vmovq %xmm0, %rax207; AVX1-NEXT: vzeroupper208; AVX1-NEXT: retq209;210; AVX2-LABEL: test_v16i64:211; AVX2: # %bb.0:212; AVX2-NEXT: vpxor %ymm3, %ymm1, %ymm1213; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm0214; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0215; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1216; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0217; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]218; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0219; AVX2-NEXT: vmovq %xmm0, %rax220; AVX2-NEXT: vzeroupper221; AVX2-NEXT: retq222;223; AVX512-LABEL: test_v16i64:224; AVX512: # %bb.0:225; AVX512-NEXT: vpxorq %zmm1, %zmm0, %zmm0226; AVX512-NEXT: vextracti64x4 $1, %zmm0, %ymm1227; AVX512-NEXT: vpxorq %zmm1, %zmm0, %zmm0228; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm1229; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm0230; AVX512-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]231; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm0232; AVX512-NEXT: vmovq %xmm0, %rax233; AVX512-NEXT: vzeroupper234; AVX512-NEXT: retq235 %1 = call i64 @llvm.vector.reduce.xor.v16i64(<16 x i64> %a0)236 ret i64 %1237}238 239;240; vXi32241;242 243define i32 @test_v2i32(<2 x i32> %a0) nounwind {244; SSE-LABEL: test_v2i32:245; SSE: # %bb.0:246; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]247; SSE-NEXT: pxor %xmm0, %xmm1248; SSE-NEXT: movd %xmm1, %eax249; SSE-NEXT: ret{{[l|q]}}250;251; AVX-LABEL: test_v2i32:252; AVX: # %bb.0:253; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]254; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0255; AVX-NEXT: vmovd %xmm0, %eax256; AVX-NEXT: retq257 %1 = call i32 @llvm.vector.reduce.xor.v2i32(<2 x i32> %a0)258 ret i32 %1259}260 261define i32 @test_v4i32(<4 x i32> %a0) nounwind {262; SSE-LABEL: test_v4i32:263; SSE: # %bb.0:264; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]265; SSE-NEXT: pxor %xmm0, %xmm1266; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]267; SSE-NEXT: pxor %xmm1, %xmm0268; SSE-NEXT: movd %xmm0, %eax269; SSE-NEXT: ret{{[l|q]}}270;271; AVX-LABEL: test_v4i32:272; AVX: # %bb.0:273; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]274; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0275; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]276; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0277; AVX-NEXT: vmovd %xmm0, %eax278; AVX-NEXT: retq279 %1 = call i32 @llvm.vector.reduce.xor.v4i32(<4 x i32> %a0)280 ret i32 %1281}282 283define i32 @test_v8i32(<8 x i32> %a0) nounwind {284; SSE-LABEL: test_v8i32:285; SSE: # %bb.0:286; SSE-NEXT: pxor %xmm1, %xmm0287; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]288; SSE-NEXT: pxor %xmm0, %xmm1289; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]290; SSE-NEXT: pxor %xmm1, %xmm0291; SSE-NEXT: movd %xmm0, %eax292; SSE-NEXT: ret{{[l|q]}}293;294; AVX1-LABEL: test_v8i32:295; AVX1: # %bb.0:296; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1297; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0298; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]299; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0300; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]301; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0302; AVX1-NEXT: vmovd %xmm0, %eax303; AVX1-NEXT: vzeroupper304; AVX1-NEXT: retq305;306; AVX2-LABEL: test_v8i32:307; AVX2: # %bb.0:308; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1309; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0310; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]311; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0312; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]313; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0314; AVX2-NEXT: vmovd %xmm0, %eax315; AVX2-NEXT: vzeroupper316; AVX2-NEXT: retq317;318; AVX512-LABEL: test_v8i32:319; AVX512: # %bb.0:320; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm1321; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm0322; AVX512-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]323; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm0324; AVX512-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]325; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm0326; AVX512-NEXT: vmovd %xmm0, %eax327; AVX512-NEXT: vzeroupper328; AVX512-NEXT: retq329 %1 = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> %a0)330 ret i32 %1331}332 333define i32 @test_v16i32(<16 x i32> %a0) nounwind {334; X86-SSE-LABEL: test_v16i32:335; X86-SSE: # %bb.0:336; X86-SSE-NEXT: pushl %ebp337; X86-SSE-NEXT: movl %esp, %ebp338; X86-SSE-NEXT: andl $-16, %esp339; X86-SSE-NEXT: subl $16, %esp340; X86-SSE-NEXT: pxor %xmm2, %xmm0341; X86-SSE-NEXT: pxor 8(%ebp), %xmm1342; X86-SSE-NEXT: pxor %xmm0, %xmm1343; X86-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]344; X86-SSE-NEXT: pxor %xmm1, %xmm0345; X86-SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]346; X86-SSE-NEXT: pxor %xmm0, %xmm1347; X86-SSE-NEXT: movd %xmm1, %eax348; X86-SSE-NEXT: movl %ebp, %esp349; X86-SSE-NEXT: popl %ebp350; X86-SSE-NEXT: retl351;352; X64-SSE-LABEL: test_v16i32:353; X64-SSE: # %bb.0:354; X64-SSE-NEXT: pxor %xmm3, %xmm1355; X64-SSE-NEXT: pxor %xmm2, %xmm0356; X64-SSE-NEXT: pxor %xmm1, %xmm0357; X64-SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]358; X64-SSE-NEXT: pxor %xmm0, %xmm1359; X64-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]360; X64-SSE-NEXT: pxor %xmm1, %xmm0361; X64-SSE-NEXT: movd %xmm0, %eax362; X64-SSE-NEXT: retq363;364; AVX1-LABEL: test_v16i32:365; AVX1: # %bb.0:366; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm0367; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1368; AVX1-NEXT: vxorps %xmm1, %xmm0, %xmm0369; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[2,3,2,3]370; AVX1-NEXT: vxorps %xmm1, %xmm0, %xmm0371; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[1,1,1,1]372; AVX1-NEXT: vxorps %xmm1, %xmm0, %xmm0373; AVX1-NEXT: vmovd %xmm0, %eax374; AVX1-NEXT: vzeroupper375; AVX1-NEXT: retq376;377; AVX2-LABEL: test_v16i32:378; AVX2: # %bb.0:379; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0380; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1381; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0382; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]383; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0384; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]385; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0386; AVX2-NEXT: vmovd %xmm0, %eax387; AVX2-NEXT: vzeroupper388; AVX2-NEXT: retq389;390; AVX512-LABEL: test_v16i32:391; AVX512: # %bb.0:392; AVX512-NEXT: vextracti64x4 $1, %zmm0, %ymm1393; AVX512-NEXT: vpxord %zmm1, %zmm0, %zmm0394; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm1395; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm0396; AVX512-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]397; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm0398; AVX512-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]399; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm0400; AVX512-NEXT: vmovd %xmm0, %eax401; AVX512-NEXT: vzeroupper402; AVX512-NEXT: retq403 %1 = call i32 @llvm.vector.reduce.xor.v16i32(<16 x i32> %a0)404 ret i32 %1405}406 407define i32 @test_v32i32(<32 x i32> %a0) nounwind {408; X86-SSE-LABEL: test_v32i32:409; X86-SSE: # %bb.0:410; X86-SSE-NEXT: pushl %ebp411; X86-SSE-NEXT: movl %esp, %ebp412; X86-SSE-NEXT: andl $-16, %esp413; X86-SSE-NEXT: subl $16, %esp414; X86-SSE-NEXT: movdqa 8(%ebp), %xmm3415; X86-SSE-NEXT: pxor 56(%ebp), %xmm2416; X86-SSE-NEXT: pxor 24(%ebp), %xmm0417; X86-SSE-NEXT: pxor %xmm2, %xmm0418; X86-SSE-NEXT: pxor 72(%ebp), %xmm3419; X86-SSE-NEXT: pxor 40(%ebp), %xmm1420; X86-SSE-NEXT: pxor %xmm3, %xmm1421; X86-SSE-NEXT: pxor %xmm0, %xmm1422; X86-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]423; X86-SSE-NEXT: pxor %xmm1, %xmm0424; X86-SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]425; X86-SSE-NEXT: pxor %xmm0, %xmm1426; X86-SSE-NEXT: movd %xmm1, %eax427; X86-SSE-NEXT: movl %ebp, %esp428; X86-SSE-NEXT: popl %ebp429; X86-SSE-NEXT: retl430;431; X64-SSE-LABEL: test_v32i32:432; X64-SSE: # %bb.0:433; X64-SSE-NEXT: pxor %xmm6, %xmm2434; X64-SSE-NEXT: pxor %xmm4, %xmm0435; X64-SSE-NEXT: pxor %xmm2, %xmm0436; X64-SSE-NEXT: pxor %xmm7, %xmm3437; X64-SSE-NEXT: pxor %xmm5, %xmm1438; X64-SSE-NEXT: pxor %xmm3, %xmm1439; X64-SSE-NEXT: pxor %xmm0, %xmm1440; X64-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]441; X64-SSE-NEXT: pxor %xmm1, %xmm0442; X64-SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]443; X64-SSE-NEXT: pxor %xmm0, %xmm1444; X64-SSE-NEXT: movd %xmm1, %eax445; X64-SSE-NEXT: retq446;447; AVX1-LABEL: test_v32i32:448; AVX1: # %bb.0:449; AVX1-NEXT: vxorps %ymm3, %ymm1, %ymm1450; AVX1-NEXT: vxorps %ymm2, %ymm0, %ymm0451; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm0452; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1453; AVX1-NEXT: vxorps %xmm1, %xmm0, %xmm0454; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[2,3,2,3]455; AVX1-NEXT: vxorps %xmm1, %xmm0, %xmm0456; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[1,1,1,1]457; AVX1-NEXT: vxorps %xmm1, %xmm0, %xmm0458; AVX1-NEXT: vmovd %xmm0, %eax459; AVX1-NEXT: vzeroupper460; AVX1-NEXT: retq461;462; AVX2-LABEL: test_v32i32:463; AVX2: # %bb.0:464; AVX2-NEXT: vpxor %ymm3, %ymm1, %ymm1465; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm0466; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0467; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1468; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0469; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]470; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0471; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]472; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0473; AVX2-NEXT: vmovd %xmm0, %eax474; AVX2-NEXT: vzeroupper475; AVX2-NEXT: retq476;477; AVX512-LABEL: test_v32i32:478; AVX512: # %bb.0:479; AVX512-NEXT: vpxord %zmm1, %zmm0, %zmm0480; AVX512-NEXT: vextracti64x4 $1, %zmm0, %ymm1481; AVX512-NEXT: vpxord %zmm1, %zmm0, %zmm0482; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm1483; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm0484; AVX512-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]485; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm0486; AVX512-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]487; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm0488; AVX512-NEXT: vmovd %xmm0, %eax489; AVX512-NEXT: vzeroupper490; AVX512-NEXT: retq491 %1 = call i32 @llvm.vector.reduce.xor.v32i32(<32 x i32> %a0)492 ret i32 %1493}494 495;496; vXi16497;498 499define i16 @test_v2i16(<2 x i16> %a0) nounwind {500; SSE-LABEL: test_v2i16:501; SSE: # %bb.0:502; SSE-NEXT: movdqa %xmm0, %xmm1503; SSE-NEXT: psrld $16, %xmm1504; SSE-NEXT: pxor %xmm0, %xmm1505; SSE-NEXT: movd %xmm1, %eax506; SSE-NEXT: # kill: def $ax killed $ax killed $eax507; SSE-NEXT: ret{{[l|q]}}508;509; AVX-LABEL: test_v2i16:510; AVX: # %bb.0:511; AVX-NEXT: vpsrld $16, %xmm0, %xmm1512; AVX-NEXT: vpxor %xmm0, %xmm1, %xmm0513; AVX-NEXT: vmovd %xmm0, %eax514; AVX-NEXT: # kill: def $ax killed $ax killed $eax515; AVX-NEXT: retq516 %1 = call i16 @llvm.vector.reduce.xor.v2i16(<2 x i16> %a0)517 ret i16 %1518}519 520define i16 @test_v4i16(<4 x i16> %a0) nounwind {521; SSE-LABEL: test_v4i16:522; SSE: # %bb.0:523; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]524; SSE-NEXT: pxor %xmm0, %xmm1525; SSE-NEXT: movdqa %xmm1, %xmm0526; SSE-NEXT: psrld $16, %xmm0527; SSE-NEXT: pxor %xmm1, %xmm0528; SSE-NEXT: movd %xmm0, %eax529; SSE-NEXT: # kill: def $ax killed $ax killed $eax530; SSE-NEXT: ret{{[l|q]}}531;532; AVX-LABEL: test_v4i16:533; AVX: # %bb.0:534; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]535; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0536; AVX-NEXT: vpsrld $16, %xmm0, %xmm1537; AVX-NEXT: vpxor %xmm0, %xmm1, %xmm0538; AVX-NEXT: vmovd %xmm0, %eax539; AVX-NEXT: # kill: def $ax killed $ax killed $eax540; AVX-NEXT: retq541 %1 = call i16 @llvm.vector.reduce.xor.v4i16(<4 x i16> %a0)542 ret i16 %1543}544 545define i16 @test_v8i16(<8 x i16> %a0) nounwind {546; SSE-LABEL: test_v8i16:547; SSE: # %bb.0:548; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]549; SSE-NEXT: pxor %xmm0, %xmm1550; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]551; SSE-NEXT: pxor %xmm1, %xmm0552; SSE-NEXT: movdqa %xmm0, %xmm1553; SSE-NEXT: psrld $16, %xmm1554; SSE-NEXT: pxor %xmm0, %xmm1555; SSE-NEXT: movd %xmm1, %eax556; SSE-NEXT: # kill: def $ax killed $ax killed $eax557; SSE-NEXT: ret{{[l|q]}}558;559; AVX-LABEL: test_v8i16:560; AVX: # %bb.0:561; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]562; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0563; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]564; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0565; AVX-NEXT: vpsrld $16, %xmm0, %xmm1566; AVX-NEXT: vpxor %xmm0, %xmm1, %xmm0567; AVX-NEXT: vmovd %xmm0, %eax568; AVX-NEXT: # kill: def $ax killed $ax killed $eax569; AVX-NEXT: retq570 %1 = call i16 @llvm.vector.reduce.xor.v8i16(<8 x i16> %a0)571 ret i16 %1572}573 574define i16 @test_v16i16(<16 x i16> %a0) nounwind {575; SSE-LABEL: test_v16i16:576; SSE: # %bb.0:577; SSE-NEXT: pxor %xmm1, %xmm0578; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]579; SSE-NEXT: pxor %xmm0, %xmm1580; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]581; SSE-NEXT: pxor %xmm1, %xmm0582; SSE-NEXT: movdqa %xmm0, %xmm1583; SSE-NEXT: psrld $16, %xmm1584; SSE-NEXT: pxor %xmm0, %xmm1585; SSE-NEXT: movd %xmm1, %eax586; SSE-NEXT: # kill: def $ax killed $ax killed $eax587; SSE-NEXT: ret{{[l|q]}}588;589; AVX1-LABEL: test_v16i16:590; AVX1: # %bb.0:591; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1592; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0593; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]594; AVX1-NEXT: vpxor %xmm0, %xmm1, %xmm0595; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]596; AVX1-NEXT: vpxor %xmm0, %xmm1, %xmm0597; AVX1-NEXT: vpsrld $16, %xmm0, %xmm1598; AVX1-NEXT: vpxor %xmm0, %xmm1, %xmm0599; AVX1-NEXT: vmovd %xmm0, %eax600; AVX1-NEXT: # kill: def $ax killed $ax killed $eax601; AVX1-NEXT: vzeroupper602; AVX1-NEXT: retq603;604; AVX2-LABEL: test_v16i16:605; AVX2: # %bb.0:606; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1607; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0608; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]609; AVX2-NEXT: vpxor %xmm0, %xmm1, %xmm0610; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]611; AVX2-NEXT: vpxor %xmm0, %xmm1, %xmm0612; AVX2-NEXT: vpsrld $16, %xmm0, %xmm1613; AVX2-NEXT: vpxor %xmm0, %xmm1, %xmm0614; AVX2-NEXT: vmovd %xmm0, %eax615; AVX2-NEXT: # kill: def $ax killed $ax killed $eax616; AVX2-NEXT: vzeroupper617; AVX2-NEXT: retq618;619; AVX512-LABEL: test_v16i16:620; AVX512: # %bb.0:621; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm1622; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm0623; AVX512-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]624; AVX512-NEXT: vpxor %xmm0, %xmm1, %xmm0625; AVX512-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]626; AVX512-NEXT: vpxor %xmm0, %xmm1, %xmm0627; AVX512-NEXT: vpsrld $16, %xmm0, %xmm1628; AVX512-NEXT: vpxor %xmm0, %xmm1, %xmm0629; AVX512-NEXT: vmovd %xmm0, %eax630; AVX512-NEXT: # kill: def $ax killed $ax killed $eax631; AVX512-NEXT: vzeroupper632; AVX512-NEXT: retq633 %1 = call i16 @llvm.vector.reduce.xor.v16i16(<16 x i16> %a0)634 ret i16 %1635}636 637define i16 @test_v32i16(<32 x i16> %a0) nounwind {638; X86-SSE-LABEL: test_v32i16:639; X86-SSE: # %bb.0:640; X86-SSE-NEXT: pushl %ebp641; X86-SSE-NEXT: movl %esp, %ebp642; X86-SSE-NEXT: andl $-16, %esp643; X86-SSE-NEXT: subl $16, %esp644; X86-SSE-NEXT: pxor %xmm2, %xmm0645; X86-SSE-NEXT: pxor 8(%ebp), %xmm1646; X86-SSE-NEXT: pxor %xmm0, %xmm1647; X86-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]648; X86-SSE-NEXT: pxor %xmm1, %xmm0649; X86-SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]650; X86-SSE-NEXT: pxor %xmm0, %xmm1651; X86-SSE-NEXT: movdqa %xmm1, %xmm0652; X86-SSE-NEXT: psrld $16, %xmm0653; X86-SSE-NEXT: pxor %xmm1, %xmm0654; X86-SSE-NEXT: movd %xmm0, %eax655; X86-SSE-NEXT: # kill: def $ax killed $ax killed $eax656; X86-SSE-NEXT: movl %ebp, %esp657; X86-SSE-NEXT: popl %ebp658; X86-SSE-NEXT: retl659;660; X64-SSE-LABEL: test_v32i16:661; X64-SSE: # %bb.0:662; X64-SSE-NEXT: pxor %xmm3, %xmm1663; X64-SSE-NEXT: pxor %xmm2, %xmm0664; X64-SSE-NEXT: pxor %xmm1, %xmm0665; X64-SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]666; X64-SSE-NEXT: pxor %xmm0, %xmm1667; X64-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]668; X64-SSE-NEXT: pxor %xmm1, %xmm0669; X64-SSE-NEXT: movdqa %xmm0, %xmm1670; X64-SSE-NEXT: psrld $16, %xmm1671; X64-SSE-NEXT: pxor %xmm0, %xmm1672; X64-SSE-NEXT: movd %xmm1, %eax673; X64-SSE-NEXT: # kill: def $ax killed $ax killed $eax674; X64-SSE-NEXT: retq675;676; AVX1-LABEL: test_v32i16:677; AVX1: # %bb.0:678; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm0679; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1680; AVX1-NEXT: vxorps %xmm1, %xmm0, %xmm0681; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[2,3,2,3]682; AVX1-NEXT: vxorps %xmm0, %xmm1, %xmm0683; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[1,1,1,1]684; AVX1-NEXT: vxorps %xmm0, %xmm1, %xmm0685; AVX1-NEXT: vpsrld $16, %xmm0, %xmm1686; AVX1-NEXT: vpxor %xmm0, %xmm1, %xmm0687; AVX1-NEXT: vmovd %xmm0, %eax688; AVX1-NEXT: # kill: def $ax killed $ax killed $eax689; AVX1-NEXT: vzeroupper690; AVX1-NEXT: retq691;692; AVX2-LABEL: test_v32i16:693; AVX2: # %bb.0:694; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0695; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1696; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0697; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]698; AVX2-NEXT: vpxor %xmm0, %xmm1, %xmm0699; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]700; AVX2-NEXT: vpxor %xmm0, %xmm1, %xmm0701; AVX2-NEXT: vpsrld $16, %xmm0, %xmm1702; AVX2-NEXT: vpxor %xmm0, %xmm1, %xmm0703; AVX2-NEXT: vmovd %xmm0, %eax704; AVX2-NEXT: # kill: def $ax killed $ax killed $eax705; AVX2-NEXT: vzeroupper706; AVX2-NEXT: retq707;708; AVX512-LABEL: test_v32i16:709; AVX512: # %bb.0:710; AVX512-NEXT: vextracti64x4 $1, %zmm0, %ymm1711; AVX512-NEXT: vpxorq %zmm1, %zmm0, %zmm0712; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm1713; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm0714; AVX512-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]715; AVX512-NEXT: vpxor %xmm0, %xmm1, %xmm0716; AVX512-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]717; AVX512-NEXT: vpxor %xmm0, %xmm1, %xmm0718; AVX512-NEXT: vpsrld $16, %xmm0, %xmm1719; AVX512-NEXT: vpxor %xmm0, %xmm1, %xmm0720; AVX512-NEXT: vmovd %xmm0, %eax721; AVX512-NEXT: # kill: def $ax killed $ax killed $eax722; AVX512-NEXT: vzeroupper723; AVX512-NEXT: retq724 %1 = call i16 @llvm.vector.reduce.xor.v32i16(<32 x i16> %a0)725 ret i16 %1726}727 728define i16 @test_v64i16(<64 x i16> %a0) nounwind {729; X86-SSE-LABEL: test_v64i16:730; X86-SSE: # %bb.0:731; X86-SSE-NEXT: pushl %ebp732; X86-SSE-NEXT: movl %esp, %ebp733; X86-SSE-NEXT: andl $-16, %esp734; X86-SSE-NEXT: subl $16, %esp735; X86-SSE-NEXT: movdqa 8(%ebp), %xmm3736; X86-SSE-NEXT: pxor 56(%ebp), %xmm2737; X86-SSE-NEXT: pxor 24(%ebp), %xmm0738; X86-SSE-NEXT: pxor %xmm2, %xmm0739; X86-SSE-NEXT: pxor 72(%ebp), %xmm3740; X86-SSE-NEXT: pxor 40(%ebp), %xmm1741; X86-SSE-NEXT: pxor %xmm3, %xmm1742; X86-SSE-NEXT: pxor %xmm0, %xmm1743; X86-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]744; X86-SSE-NEXT: pxor %xmm1, %xmm0745; X86-SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]746; X86-SSE-NEXT: pxor %xmm0, %xmm1747; X86-SSE-NEXT: movdqa %xmm1, %xmm0748; X86-SSE-NEXT: psrld $16, %xmm0749; X86-SSE-NEXT: pxor %xmm1, %xmm0750; X86-SSE-NEXT: movd %xmm0, %eax751; X86-SSE-NEXT: # kill: def $ax killed $ax killed $eax752; X86-SSE-NEXT: movl %ebp, %esp753; X86-SSE-NEXT: popl %ebp754; X86-SSE-NEXT: retl755;756; X64-SSE-LABEL: test_v64i16:757; X64-SSE: # %bb.0:758; X64-SSE-NEXT: pxor %xmm6, %xmm2759; X64-SSE-NEXT: pxor %xmm4, %xmm0760; X64-SSE-NEXT: pxor %xmm2, %xmm0761; X64-SSE-NEXT: pxor %xmm7, %xmm3762; X64-SSE-NEXT: pxor %xmm5, %xmm1763; X64-SSE-NEXT: pxor %xmm3, %xmm1764; X64-SSE-NEXT: pxor %xmm0, %xmm1765; X64-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]766; X64-SSE-NEXT: pxor %xmm1, %xmm0767; X64-SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]768; X64-SSE-NEXT: pxor %xmm0, %xmm1769; X64-SSE-NEXT: movdqa %xmm1, %xmm0770; X64-SSE-NEXT: psrld $16, %xmm0771; X64-SSE-NEXT: pxor %xmm1, %xmm0772; X64-SSE-NEXT: movd %xmm0, %eax773; X64-SSE-NEXT: # kill: def $ax killed $ax killed $eax774; X64-SSE-NEXT: retq775;776; AVX1-LABEL: test_v64i16:777; AVX1: # %bb.0:778; AVX1-NEXT: vxorps %ymm3, %ymm1, %ymm1779; AVX1-NEXT: vxorps %ymm2, %ymm0, %ymm0780; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm0781; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1782; AVX1-NEXT: vxorps %xmm1, %xmm0, %xmm0783; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[2,3,2,3]784; AVX1-NEXT: vxorps %xmm0, %xmm1, %xmm0785; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[1,1,1,1]786; AVX1-NEXT: vxorps %xmm0, %xmm1, %xmm0787; AVX1-NEXT: vpsrld $16, %xmm0, %xmm1788; AVX1-NEXT: vpxor %xmm0, %xmm1, %xmm0789; AVX1-NEXT: vmovd %xmm0, %eax790; AVX1-NEXT: # kill: def $ax killed $ax killed $eax791; AVX1-NEXT: vzeroupper792; AVX1-NEXT: retq793;794; AVX2-LABEL: test_v64i16:795; AVX2: # %bb.0:796; AVX2-NEXT: vpxor %ymm3, %ymm1, %ymm1797; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm0798; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0799; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1800; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0801; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]802; AVX2-NEXT: vpxor %xmm0, %xmm1, %xmm0803; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]804; AVX2-NEXT: vpxor %xmm0, %xmm1, %xmm0805; AVX2-NEXT: vpsrld $16, %xmm0, %xmm1806; AVX2-NEXT: vpxor %xmm0, %xmm1, %xmm0807; AVX2-NEXT: vmovd %xmm0, %eax808; AVX2-NEXT: # kill: def $ax killed $ax killed $eax809; AVX2-NEXT: vzeroupper810; AVX2-NEXT: retq811;812; AVX512-LABEL: test_v64i16:813; AVX512: # %bb.0:814; AVX512-NEXT: vpxorq %zmm1, %zmm0, %zmm0815; AVX512-NEXT: vextracti64x4 $1, %zmm0, %ymm1816; AVX512-NEXT: vpxorq %zmm1, %zmm0, %zmm0817; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm1818; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm0819; AVX512-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]820; AVX512-NEXT: vpxor %xmm0, %xmm1, %xmm0821; AVX512-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]822; AVX512-NEXT: vpxor %xmm0, %xmm1, %xmm0823; AVX512-NEXT: vpsrld $16, %xmm0, %xmm1824; AVX512-NEXT: vpxor %xmm0, %xmm1, %xmm0825; AVX512-NEXT: vmovd %xmm0, %eax826; AVX512-NEXT: # kill: def $ax killed $ax killed $eax827; AVX512-NEXT: vzeroupper828; AVX512-NEXT: retq829 %1 = call i16 @llvm.vector.reduce.xor.v64i16(<64 x i16> %a0)830 ret i16 %1831}832 833;834; vXi8835;836 837define i8 @test_v2i8(<2 x i8> %a0) nounwind {838; SSE-LABEL: test_v2i8:839; SSE: # %bb.0:840; SSE-NEXT: movdqa %xmm0, %xmm1841; SSE-NEXT: psrlw $8, %xmm1842; SSE-NEXT: pxor %xmm0, %xmm1843; SSE-NEXT: movd %xmm1, %eax844; SSE-NEXT: # kill: def $al killed $al killed $eax845; SSE-NEXT: ret{{[l|q]}}846;847; AVX-LABEL: test_v2i8:848; AVX: # %bb.0:849; AVX-NEXT: vpsrlw $8, %xmm0, %xmm1850; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0851; AVX-NEXT: vmovd %xmm0, %eax852; AVX-NEXT: # kill: def $al killed $al killed $eax853; AVX-NEXT: retq854 %1 = call i8 @llvm.vector.reduce.xor.v2i8(<2 x i8> %a0)855 ret i8 %1856}857 858define i8 @test_v4i8(<4 x i8> %a0) nounwind {859; SSE-LABEL: test_v4i8:860; SSE: # %bb.0:861; SSE-NEXT: movdqa %xmm0, %xmm1862; SSE-NEXT: psrld $16, %xmm1863; SSE-NEXT: pxor %xmm0, %xmm1864; SSE-NEXT: movdqa %xmm1, %xmm0865; SSE-NEXT: psrlw $8, %xmm0866; SSE-NEXT: pxor %xmm1, %xmm0867; SSE-NEXT: movd %xmm0, %eax868; SSE-NEXT: # kill: def $al killed $al killed $eax869; SSE-NEXT: ret{{[l|q]}}870;871; AVX-LABEL: test_v4i8:872; AVX: # %bb.0:873; AVX-NEXT: vpsrld $16, %xmm0, %xmm1874; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0875; AVX-NEXT: vpsrlw $8, %xmm0, %xmm1876; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0877; AVX-NEXT: vmovd %xmm0, %eax878; AVX-NEXT: # kill: def $al killed $al killed $eax879; AVX-NEXT: retq880 %1 = call i8 @llvm.vector.reduce.xor.v4i8(<4 x i8> %a0)881 ret i8 %1882}883 884define i8 @test_v8i8(<8 x i8> %a0) nounwind {885; SSE-LABEL: test_v8i8:886; SSE: # %bb.0:887; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]888; SSE-NEXT: pxor %xmm0, %xmm1889; SSE-NEXT: movdqa %xmm1, %xmm0890; SSE-NEXT: psrld $16, %xmm0891; SSE-NEXT: pxor %xmm1, %xmm0892; SSE-NEXT: movdqa %xmm0, %xmm1893; SSE-NEXT: psrlw $8, %xmm1894; SSE-NEXT: pxor %xmm0, %xmm1895; SSE-NEXT: movd %xmm1, %eax896; SSE-NEXT: # kill: def $al killed $al killed $eax897; SSE-NEXT: ret{{[l|q]}}898;899; AVX-LABEL: test_v8i8:900; AVX: # %bb.0:901; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]902; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0903; AVX-NEXT: vpsrld $16, %xmm0, %xmm1904; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0905; AVX-NEXT: vpsrlw $8, %xmm0, %xmm1906; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0907; AVX-NEXT: vmovd %xmm0, %eax908; AVX-NEXT: # kill: def $al killed $al killed $eax909; AVX-NEXT: retq910 %1 = call i8 @llvm.vector.reduce.xor.v8i8(<8 x i8> %a0)911 ret i8 %1912}913 914define i8 @test_v16i8(<16 x i8> %a0) nounwind {915; SSE-LABEL: test_v16i8:916; SSE: # %bb.0:917; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]918; SSE-NEXT: pxor %xmm0, %xmm1919; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]920; SSE-NEXT: pxor %xmm1, %xmm0921; SSE-NEXT: movdqa %xmm0, %xmm1922; SSE-NEXT: psrld $16, %xmm1923; SSE-NEXT: pxor %xmm0, %xmm1924; SSE-NEXT: movdqa %xmm1, %xmm0925; SSE-NEXT: psrlw $8, %xmm0926; SSE-NEXT: pxor %xmm1, %xmm0927; SSE-NEXT: movd %xmm0, %eax928; SSE-NEXT: # kill: def $al killed $al killed $eax929; SSE-NEXT: ret{{[l|q]}}930;931; AVX-LABEL: test_v16i8:932; AVX: # %bb.0:933; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]934; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0935; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]936; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0937; AVX-NEXT: vpsrld $16, %xmm0, %xmm1938; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0939; AVX-NEXT: vpsrlw $8, %xmm0, %xmm1940; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0941; AVX-NEXT: vmovd %xmm0, %eax942; AVX-NEXT: # kill: def $al killed $al killed $eax943; AVX-NEXT: retq944 %1 = call i8 @llvm.vector.reduce.xor.v16i8(<16 x i8> %a0)945 ret i8 %1946}947 948define i8 @test_v32i8(<32 x i8> %a0) nounwind {949; SSE-LABEL: test_v32i8:950; SSE: # %bb.0:951; SSE-NEXT: pxor %xmm1, %xmm0952; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]953; SSE-NEXT: pxor %xmm0, %xmm1954; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]955; SSE-NEXT: pxor %xmm1, %xmm0956; SSE-NEXT: movdqa %xmm0, %xmm1957; SSE-NEXT: psrld $16, %xmm1958; SSE-NEXT: pxor %xmm0, %xmm1959; SSE-NEXT: movdqa %xmm1, %xmm0960; SSE-NEXT: psrlw $8, %xmm0961; SSE-NEXT: pxor %xmm1, %xmm0962; SSE-NEXT: movd %xmm0, %eax963; SSE-NEXT: # kill: def $al killed $al killed $eax964; SSE-NEXT: ret{{[l|q]}}965;966; AVX1-LABEL: test_v32i8:967; AVX1: # %bb.0:968; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1969; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0970; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]971; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0972; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]973; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0974; AVX1-NEXT: vpsrld $16, %xmm0, %xmm1975; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0976; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1977; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0978; AVX1-NEXT: vmovd %xmm0, %eax979; AVX1-NEXT: # kill: def $al killed $al killed $eax980; AVX1-NEXT: vzeroupper981; AVX1-NEXT: retq982;983; AVX2-LABEL: test_v32i8:984; AVX2: # %bb.0:985; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1986; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0987; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]988; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0989; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]990; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0991; AVX2-NEXT: vpsrld $16, %xmm0, %xmm1992; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0993; AVX2-NEXT: vpsrlw $8, %xmm0, %xmm1994; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0995; AVX2-NEXT: vmovd %xmm0, %eax996; AVX2-NEXT: # kill: def $al killed $al killed $eax997; AVX2-NEXT: vzeroupper998; AVX2-NEXT: retq999;1000; AVX512-LABEL: test_v32i8:1001; AVX512: # %bb.0:1002; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm11003; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm01004; AVX512-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1005; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm01006; AVX512-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1007; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm01008; AVX512-NEXT: vpsrld $16, %xmm0, %xmm11009; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm01010; AVX512-NEXT: vpsrlw $8, %xmm0, %xmm11011; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm01012; AVX512-NEXT: vmovd %xmm0, %eax1013; AVX512-NEXT: # kill: def $al killed $al killed $eax1014; AVX512-NEXT: vzeroupper1015; AVX512-NEXT: retq1016 %1 = call i8 @llvm.vector.reduce.xor.v32i8(<32 x i8> %a0)1017 ret i8 %11018}1019 1020define i8 @test_v64i8(<64 x i8> %a0) nounwind {1021; X86-SSE-LABEL: test_v64i8:1022; X86-SSE: # %bb.0:1023; X86-SSE-NEXT: pushl %ebp1024; X86-SSE-NEXT: movl %esp, %ebp1025; X86-SSE-NEXT: andl $-16, %esp1026; X86-SSE-NEXT: subl $16, %esp1027; X86-SSE-NEXT: pxor %xmm2, %xmm01028; X86-SSE-NEXT: pxor 8(%ebp), %xmm11029; X86-SSE-NEXT: pxor %xmm0, %xmm11030; X86-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]1031; X86-SSE-NEXT: pxor %xmm1, %xmm01032; X86-SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1033; X86-SSE-NEXT: pxor %xmm0, %xmm11034; X86-SSE-NEXT: movdqa %xmm1, %xmm01035; X86-SSE-NEXT: psrld $16, %xmm01036; X86-SSE-NEXT: pxor %xmm1, %xmm01037; X86-SSE-NEXT: movdqa %xmm0, %xmm11038; X86-SSE-NEXT: psrlw $8, %xmm11039; X86-SSE-NEXT: pxor %xmm0, %xmm11040; X86-SSE-NEXT: movd %xmm1, %eax1041; X86-SSE-NEXT: # kill: def $al killed $al killed $eax1042; X86-SSE-NEXT: movl %ebp, %esp1043; X86-SSE-NEXT: popl %ebp1044; X86-SSE-NEXT: retl1045;1046; X64-SSE-LABEL: test_v64i8:1047; X64-SSE: # %bb.0:1048; X64-SSE-NEXT: pxor %xmm3, %xmm11049; X64-SSE-NEXT: pxor %xmm2, %xmm01050; X64-SSE-NEXT: pxor %xmm1, %xmm01051; X64-SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1052; X64-SSE-NEXT: pxor %xmm0, %xmm11053; X64-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]1054; X64-SSE-NEXT: pxor %xmm1, %xmm01055; X64-SSE-NEXT: movdqa %xmm0, %xmm11056; X64-SSE-NEXT: psrld $16, %xmm11057; X64-SSE-NEXT: pxor %xmm0, %xmm11058; X64-SSE-NEXT: movdqa %xmm1, %xmm01059; X64-SSE-NEXT: psrlw $8, %xmm01060; X64-SSE-NEXT: pxor %xmm1, %xmm01061; X64-SSE-NEXT: movd %xmm0, %eax1062; X64-SSE-NEXT: # kill: def $al killed $al killed $eax1063; X64-SSE-NEXT: retq1064;1065; AVX1-LABEL: test_v64i8:1066; AVX1: # %bb.0:1067; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm01068; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm11069; AVX1-NEXT: vxorps %xmm1, %xmm0, %xmm01070; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[2,3,2,3]1071; AVX1-NEXT: vxorps %xmm1, %xmm0, %xmm01072; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[1,1,1,1]1073; AVX1-NEXT: vxorps %xmm1, %xmm0, %xmm01074; AVX1-NEXT: vpsrld $16, %xmm0, %xmm11075; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm01076; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm11077; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm01078; AVX1-NEXT: vmovd %xmm0, %eax1079; AVX1-NEXT: # kill: def $al killed $al killed $eax1080; AVX1-NEXT: vzeroupper1081; AVX1-NEXT: retq1082;1083; AVX2-LABEL: test_v64i8:1084; AVX2: # %bb.0:1085; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm01086; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm11087; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm01088; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1089; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm01090; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1091; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm01092; AVX2-NEXT: vpsrld $16, %xmm0, %xmm11093; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm01094; AVX2-NEXT: vpsrlw $8, %xmm0, %xmm11095; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm01096; AVX2-NEXT: vmovd %xmm0, %eax1097; AVX2-NEXT: # kill: def $al killed $al killed $eax1098; AVX2-NEXT: vzeroupper1099; AVX2-NEXT: retq1100;1101; AVX512-LABEL: test_v64i8:1102; AVX512: # %bb.0:1103; AVX512-NEXT: vextracti64x4 $1, %zmm0, %ymm11104; AVX512-NEXT: vpxorq %zmm1, %zmm0, %zmm01105; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm11106; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm01107; AVX512-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1108; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm01109; AVX512-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1110; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm01111; AVX512-NEXT: vpsrld $16, %xmm0, %xmm11112; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm01113; AVX512-NEXT: vpsrlw $8, %xmm0, %xmm11114; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm01115; AVX512-NEXT: vmovd %xmm0, %eax1116; AVX512-NEXT: # kill: def $al killed $al killed $eax1117; AVX512-NEXT: vzeroupper1118; AVX512-NEXT: retq1119 %1 = call i8 @llvm.vector.reduce.xor.v64i8(<64 x i8> %a0)1120 ret i8 %11121}1122 1123define i8 @test_v128i8(<128 x i8> %a0) nounwind {1124; X86-SSE-LABEL: test_v128i8:1125; X86-SSE: # %bb.0:1126; X86-SSE-NEXT: pushl %ebp1127; X86-SSE-NEXT: movl %esp, %ebp1128; X86-SSE-NEXT: andl $-16, %esp1129; X86-SSE-NEXT: subl $16, %esp1130; X86-SSE-NEXT: movdqa 8(%ebp), %xmm31131; X86-SSE-NEXT: pxor 56(%ebp), %xmm21132; X86-SSE-NEXT: pxor 24(%ebp), %xmm01133; X86-SSE-NEXT: pxor %xmm2, %xmm01134; X86-SSE-NEXT: pxor 72(%ebp), %xmm31135; X86-SSE-NEXT: pxor 40(%ebp), %xmm11136; X86-SSE-NEXT: pxor %xmm3, %xmm11137; X86-SSE-NEXT: pxor %xmm0, %xmm11138; X86-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]1139; X86-SSE-NEXT: pxor %xmm1, %xmm01140; X86-SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1141; X86-SSE-NEXT: pxor %xmm0, %xmm11142; X86-SSE-NEXT: movdqa %xmm1, %xmm01143; X86-SSE-NEXT: psrld $16, %xmm01144; X86-SSE-NEXT: pxor %xmm1, %xmm01145; X86-SSE-NEXT: movdqa %xmm0, %xmm11146; X86-SSE-NEXT: psrlw $8, %xmm11147; X86-SSE-NEXT: pxor %xmm0, %xmm11148; X86-SSE-NEXT: movd %xmm1, %eax1149; X86-SSE-NEXT: # kill: def $al killed $al killed $eax1150; X86-SSE-NEXT: movl %ebp, %esp1151; X86-SSE-NEXT: popl %ebp1152; X86-SSE-NEXT: retl1153;1154; X64-SSE-LABEL: test_v128i8:1155; X64-SSE: # %bb.0:1156; X64-SSE-NEXT: pxor %xmm6, %xmm21157; X64-SSE-NEXT: pxor %xmm4, %xmm01158; X64-SSE-NEXT: pxor %xmm2, %xmm01159; X64-SSE-NEXT: pxor %xmm7, %xmm31160; X64-SSE-NEXT: pxor %xmm5, %xmm11161; X64-SSE-NEXT: pxor %xmm3, %xmm11162; X64-SSE-NEXT: pxor %xmm0, %xmm11163; X64-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]1164; X64-SSE-NEXT: pxor %xmm1, %xmm01165; X64-SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1166; X64-SSE-NEXT: pxor %xmm0, %xmm11167; X64-SSE-NEXT: movdqa %xmm1, %xmm01168; X64-SSE-NEXT: psrld $16, %xmm01169; X64-SSE-NEXT: pxor %xmm1, %xmm01170; X64-SSE-NEXT: movdqa %xmm0, %xmm11171; X64-SSE-NEXT: psrlw $8, %xmm11172; X64-SSE-NEXT: pxor %xmm0, %xmm11173; X64-SSE-NEXT: movd %xmm1, %eax1174; X64-SSE-NEXT: # kill: def $al killed $al killed $eax1175; X64-SSE-NEXT: retq1176;1177; AVX1-LABEL: test_v128i8:1178; AVX1: # %bb.0:1179; AVX1-NEXT: vxorps %ymm3, %ymm1, %ymm11180; AVX1-NEXT: vxorps %ymm2, %ymm0, %ymm01181; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm01182; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm11183; AVX1-NEXT: vxorps %xmm1, %xmm0, %xmm01184; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[2,3,2,3]1185; AVX1-NEXT: vxorps %xmm1, %xmm0, %xmm01186; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[1,1,1,1]1187; AVX1-NEXT: vxorps %xmm1, %xmm0, %xmm01188; AVX1-NEXT: vpsrld $16, %xmm0, %xmm11189; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm01190; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm11191; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm01192; AVX1-NEXT: vmovd %xmm0, %eax1193; AVX1-NEXT: # kill: def $al killed $al killed $eax1194; AVX1-NEXT: vzeroupper1195; AVX1-NEXT: retq1196;1197; AVX2-LABEL: test_v128i8:1198; AVX2: # %bb.0:1199; AVX2-NEXT: vpxor %ymm3, %ymm1, %ymm11200; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm01201; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm01202; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm11203; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm01204; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1205; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm01206; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1207; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm01208; AVX2-NEXT: vpsrld $16, %xmm0, %xmm11209; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm01210; AVX2-NEXT: vpsrlw $8, %xmm0, %xmm11211; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm01212; AVX2-NEXT: vmovd %xmm0, %eax1213; AVX2-NEXT: # kill: def $al killed $al killed $eax1214; AVX2-NEXT: vzeroupper1215; AVX2-NEXT: retq1216;1217; AVX512-LABEL: test_v128i8:1218; AVX512: # %bb.0:1219; AVX512-NEXT: vpxorq %zmm1, %zmm0, %zmm01220; AVX512-NEXT: vextracti64x4 $1, %zmm0, %ymm11221; AVX512-NEXT: vpxorq %zmm1, %zmm0, %zmm01222; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm11223; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm01224; AVX512-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1225; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm01226; AVX512-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1227; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm01228; AVX512-NEXT: vpsrld $16, %xmm0, %xmm11229; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm01230; AVX512-NEXT: vpsrlw $8, %xmm0, %xmm11231; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm01232; AVX512-NEXT: vmovd %xmm0, %eax1233; AVX512-NEXT: # kill: def $al killed $al killed $eax1234; AVX512-NEXT: vzeroupper1235; AVX512-NEXT: retq1236 %1 = call i8 @llvm.vector.reduce.xor.v128i8(<128 x i8> %a0)1237 ret i8 %11238}1239 1240declare i64 @llvm.vector.reduce.xor.v2i64(<2 x i64>)1241declare i64 @llvm.vector.reduce.xor.v4i64(<4 x i64>)1242declare i64 @llvm.vector.reduce.xor.v8i64(<8 x i64>)1243declare i64 @llvm.vector.reduce.xor.v16i64(<16 x i64>)1244 1245declare i32 @llvm.vector.reduce.xor.v2i32(<2 x i32>)1246declare i32 @llvm.vector.reduce.xor.v4i32(<4 x i32>)1247declare i32 @llvm.vector.reduce.xor.v8i32(<8 x i32>)1248declare i32 @llvm.vector.reduce.xor.v16i32(<16 x i32>)1249declare i32 @llvm.vector.reduce.xor.v32i32(<32 x i32>)1250 1251declare i16 @llvm.vector.reduce.xor.v2i16(<2 x i16>)1252declare i16 @llvm.vector.reduce.xor.v4i16(<4 x i16>)1253declare i16 @llvm.vector.reduce.xor.v8i16(<8 x i16>)1254declare i16 @llvm.vector.reduce.xor.v16i16(<16 x i16>)1255declare i16 @llvm.vector.reduce.xor.v32i16(<32 x i16>)1256declare i16 @llvm.vector.reduce.xor.v64i16(<64 x i16>)1257 1258declare i8 @llvm.vector.reduce.xor.v2i8(<2 x i8>)1259declare i8 @llvm.vector.reduce.xor.v4i8(<4 x i8>)1260declare i8 @llvm.vector.reduce.xor.v8i8(<8 x i8>)1261declare i8 @llvm.vector.reduce.xor.v16i8(<16 x i8>)1262declare i8 @llvm.vector.reduce.xor.v32i8(<32 x i8>)1263declare i8 @llvm.vector.reduce.xor.v64i8(<64 x i8>)1264declare i8 @llvm.vector.reduce.xor.v128i8(<128 x i8>)1265