brintos

brintos / llvm-project-archived public Read only

0
0
Text · 80.5 KiB · f434fc8 Raw
2623 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,SSE2,X86-SSE23; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefixes=SSE,SSE2,X64-SSE,X64-SSE24; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefixes=SSE,X64-SSE,SSE415; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX1OR2,AVX16; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX1OR2,AVX27; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefixes=AVX,AVX512,AVX512F8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw | FileCheck %s --check-prefixes=AVX,AVX512,AVX512BW9; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw,+avx512vl | FileCheck %s --check-prefixes=AVX,AVX512,AVX512VL10 11;12; Truncate13;14 15define i1 @trunc_v2i64_v2i1(<2 x i64>) nounwind {16; SSE2-LABEL: trunc_v2i64_v2i1:17; SSE2:       # %bb.0:18; SSE2-NEXT:    psllq $63, %xmm019; SSE2-NEXT:    movmskpd %xmm0, %eax20; SSE2-NEXT:    cmpl $3, %eax21; SSE2-NEXT:    sete %al22; SSE2-NEXT:    ret{{[l|q]}}23;24; SSE41-LABEL: trunc_v2i64_v2i1:25; SSE41:       # %bb.0:26; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm027; SSE41-NEXT:    setb %al28; SSE41-NEXT:    retq29;30; AVX1OR2-LABEL: trunc_v2i64_v2i1:31; AVX1OR2:       # %bb.0:32; AVX1OR2-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm033; AVX1OR2-NEXT:    setb %al34; AVX1OR2-NEXT:    retq35;36; AVX512F-LABEL: trunc_v2i64_v2i1:37; AVX512F:       # %bb.0:38; AVX512F-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm039; AVX512F-NEXT:    setb %al40; AVX512F-NEXT:    retq41;42; AVX512BW-LABEL: trunc_v2i64_v2i1:43; AVX512BW:       # %bb.0:44; AVX512BW-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm045; AVX512BW-NEXT:    setb %al46; AVX512BW-NEXT:    retq47;48; AVX512VL-LABEL: trunc_v2i64_v2i1:49; AVX512VL:       # %bb.0:50; AVX512VL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [1,1]51; AVX512VL-NEXT:    vptest %xmm1, %xmm052; AVX512VL-NEXT:    setb %al53; AVX512VL-NEXT:    retq54  %a = trunc <2 x i64> %0 to <2 x i1>55  %b = call i1 @llvm.vector.reduce.and.v2i1(<2 x i1> %a)56  ret i1 %b57}58 59define i1 @trunc_v4i32_v4i1(<4 x i32>) nounwind {60; SSE2-LABEL: trunc_v4i32_v4i1:61; SSE2:       # %bb.0:62; SSE2-NEXT:    pslld $31, %xmm063; SSE2-NEXT:    movmskps %xmm0, %eax64; SSE2-NEXT:    xorl $15, %eax65; SSE2-NEXT:    sete %al66; SSE2-NEXT:    ret{{[l|q]}}67;68; SSE41-LABEL: trunc_v4i32_v4i1:69; SSE41:       # %bb.0:70; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm071; SSE41-NEXT:    setb %al72; SSE41-NEXT:    retq73;74; AVX1OR2-LABEL: trunc_v4i32_v4i1:75; AVX1OR2:       # %bb.0:76; AVX1OR2-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm077; AVX1OR2-NEXT:    setb %al78; AVX1OR2-NEXT:    retq79;80; AVX512F-LABEL: trunc_v4i32_v4i1:81; AVX512F:       # %bb.0:82; AVX512F-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm083; AVX512F-NEXT:    setb %al84; AVX512F-NEXT:    retq85;86; AVX512BW-LABEL: trunc_v4i32_v4i1:87; AVX512BW:       # %bb.0:88; AVX512BW-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm089; AVX512BW-NEXT:    setb %al90; AVX512BW-NEXT:    retq91;92; AVX512VL-LABEL: trunc_v4i32_v4i1:93; AVX512VL:       # %bb.0:94; AVX512VL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [4294967297,4294967297]95; AVX512VL-NEXT:    vptest %xmm1, %xmm096; AVX512VL-NEXT:    setb %al97; AVX512VL-NEXT:    retq98  %a = trunc <4 x i32> %0 to <4 x i1>99  %b = call i1 @llvm.vector.reduce.and.v4i1(<4 x i1> %a)100  ret i1 %b101}102 103define i1 @trunc_v8i16_v8i1(<8 x i16>) nounwind {104; SSE2-LABEL: trunc_v8i16_v8i1:105; SSE2:       # %bb.0:106; SSE2-NEXT:    psllw $7, %xmm0107; SSE2-NEXT:    pmovmskb %xmm0, %eax108; SSE2-NEXT:    notl %eax109; SSE2-NEXT:    testl $21845, %eax # imm = 0x5555110; SSE2-NEXT:    sete %al111; SSE2-NEXT:    ret{{[l|q]}}112;113; SSE41-LABEL: trunc_v8i16_v8i1:114; SSE41:       # %bb.0:115; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0116; SSE41-NEXT:    setb %al117; SSE41-NEXT:    retq118;119; AVX1OR2-LABEL: trunc_v8i16_v8i1:120; AVX1OR2:       # %bb.0:121; AVX1OR2-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0122; AVX1OR2-NEXT:    setb %al123; AVX1OR2-NEXT:    retq124;125; AVX512F-LABEL: trunc_v8i16_v8i1:126; AVX512F:       # %bb.0:127; AVX512F-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0128; AVX512F-NEXT:    setb %al129; AVX512F-NEXT:    retq130;131; AVX512BW-LABEL: trunc_v8i16_v8i1:132; AVX512BW:       # %bb.0:133; AVX512BW-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0134; AVX512BW-NEXT:    setb %al135; AVX512BW-NEXT:    retq136;137; AVX512VL-LABEL: trunc_v8i16_v8i1:138; AVX512VL:       # %bb.0:139; AVX512VL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [281479271743489,281479271743489]140; AVX512VL-NEXT:    vptest %xmm1, %xmm0141; AVX512VL-NEXT:    setb %al142; AVX512VL-NEXT:    retq143  %a = trunc <8 x i16> %0 to <8 x i1>144  %b = call i1 @llvm.vector.reduce.and.v8i1(<8 x i1> %a)145  ret i1 %b146}147 148define i1 @trunc_v16i8_v16i1(<16 x i8>) nounwind {149; SSE2-LABEL: trunc_v16i8_v16i1:150; SSE2:       # %bb.0:151; SSE2-NEXT:    psllw $7, %xmm0152; SSE2-NEXT:    pmovmskb %xmm0, %eax153; SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF154; SSE2-NEXT:    sete %al155; SSE2-NEXT:    ret{{[l|q]}}156;157; SSE41-LABEL: trunc_v16i8_v16i1:158; SSE41:       # %bb.0:159; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0160; SSE41-NEXT:    setb %al161; SSE41-NEXT:    retq162;163; AVX1OR2-LABEL: trunc_v16i8_v16i1:164; AVX1OR2:       # %bb.0:165; AVX1OR2-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0166; AVX1OR2-NEXT:    setb %al167; AVX1OR2-NEXT:    retq168;169; AVX512F-LABEL: trunc_v16i8_v16i1:170; AVX512F:       # %bb.0:171; AVX512F-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0172; AVX512F-NEXT:    setb %al173; AVX512F-NEXT:    retq174;175; AVX512BW-LABEL: trunc_v16i8_v16i1:176; AVX512BW:       # %bb.0:177; AVX512BW-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0178; AVX512BW-NEXT:    setb %al179; AVX512BW-NEXT:    retq180;181; AVX512VL-LABEL: trunc_v16i8_v16i1:182; AVX512VL:       # %bb.0:183; AVX512VL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [72340172838076673,72340172838076673]184; AVX512VL-NEXT:    vptest %xmm1, %xmm0185; AVX512VL-NEXT:    setb %al186; AVX512VL-NEXT:    retq187  %a = trunc <16 x i8> %0 to <16 x i1>188  %b = call i1 @llvm.vector.reduce.and.v16i1(<16 x i1> %a)189  ret i1 %b190}191 192define i1 @trunc_v4i64_v4i1(<4 x i64>) nounwind {193; SSE2-LABEL: trunc_v4i64_v4i1:194; SSE2:       # %bb.0:195; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]196; SSE2-NEXT:    pslld $31, %xmm0197; SSE2-NEXT:    movmskps %xmm0, %eax198; SSE2-NEXT:    cmpl $15, %eax199; SSE2-NEXT:    sete %al200; SSE2-NEXT:    ret{{[l|q]}}201;202; SSE41-LABEL: trunc_v4i64_v4i1:203; SSE41:       # %bb.0:204; SSE41-NEXT:    pand %xmm1, %xmm0205; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0206; SSE41-NEXT:    setb %al207; SSE41-NEXT:    retq208;209; AVX1-LABEL: trunc_v4i64_v4i1:210; AVX1:       # %bb.0:211; AVX1-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0212; AVX1-NEXT:    setb %al213; AVX1-NEXT:    vzeroupper214; AVX1-NEXT:    retq215;216; AVX2-LABEL: trunc_v4i64_v4i1:217; AVX2:       # %bb.0:218; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [1,1,1,1]219; AVX2-NEXT:    vptest %ymm1, %ymm0220; AVX2-NEXT:    setb %al221; AVX2-NEXT:    vzeroupper222; AVX2-NEXT:    retq223;224; AVX512-LABEL: trunc_v4i64_v4i1:225; AVX512:       # %bb.0:226; AVX512-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [1,1,1,1]227; AVX512-NEXT:    vptest %ymm1, %ymm0228; AVX512-NEXT:    setb %al229; AVX512-NEXT:    vzeroupper230; AVX512-NEXT:    retq231  %a = trunc <4 x i64> %0 to <4 x i1>232  %b = call i1 @llvm.vector.reduce.and.v4i1(<4 x i1> %a)233  ret i1 %b234}235 236define i1 @trunc_v8i32_v8i1(<8 x i32>) nounwind {237; SSE2-LABEL: trunc_v8i32_v8i1:238; SSE2:       # %bb.0:239; SSE2-NEXT:    pand %xmm1, %xmm0240; SSE2-NEXT:    pslld $31, %xmm0241; SSE2-NEXT:    movmskps %xmm0, %eax242; SSE2-NEXT:    xorl $15, %eax243; SSE2-NEXT:    sete %al244; SSE2-NEXT:    ret{{[l|q]}}245;246; SSE41-LABEL: trunc_v8i32_v8i1:247; SSE41:       # %bb.0:248; SSE41-NEXT:    pand %xmm1, %xmm0249; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0250; SSE41-NEXT:    setb %al251; SSE41-NEXT:    retq252;253; AVX1-LABEL: trunc_v8i32_v8i1:254; AVX1:       # %bb.0:255; AVX1-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0256; AVX1-NEXT:    setb %al257; AVX1-NEXT:    vzeroupper258; AVX1-NEXT:    retq259;260; AVX2-LABEL: trunc_v8i32_v8i1:261; AVX2:       # %bb.0:262; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4294967297,4294967297,4294967297,4294967297]263; AVX2-NEXT:    vptest %ymm1, %ymm0264; AVX2-NEXT:    setb %al265; AVX2-NEXT:    vzeroupper266; AVX2-NEXT:    retq267;268; AVX512-LABEL: trunc_v8i32_v8i1:269; AVX512:       # %bb.0:270; AVX512-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4294967297,4294967297,4294967297,4294967297]271; AVX512-NEXT:    vptest %ymm1, %ymm0272; AVX512-NEXT:    setb %al273; AVX512-NEXT:    vzeroupper274; AVX512-NEXT:    retq275  %a = trunc <8 x i32> %0 to <8 x i1>276  %b = call i1 @llvm.vector.reduce.and.v8i1(<8 x i1> %a)277  ret i1 %b278}279 280define i1 @trunc_v16i16_v16i1(<16 x i16>) nounwind {281; SSE2-LABEL: trunc_v16i16_v16i1:282; SSE2:       # %bb.0:283; SSE2-NEXT:    pand %xmm1, %xmm0284; SSE2-NEXT:    psllw $7, %xmm0285; SSE2-NEXT:    pmovmskb %xmm0, %eax286; SSE2-NEXT:    notl %eax287; SSE2-NEXT:    testl $21845, %eax # imm = 0x5555288; SSE2-NEXT:    sete %al289; SSE2-NEXT:    ret{{[l|q]}}290;291; SSE41-LABEL: trunc_v16i16_v16i1:292; SSE41:       # %bb.0:293; SSE41-NEXT:    pand %xmm1, %xmm0294; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0295; SSE41-NEXT:    setb %al296; SSE41-NEXT:    retq297;298; AVX1-LABEL: trunc_v16i16_v16i1:299; AVX1:       # %bb.0:300; AVX1-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0301; AVX1-NEXT:    setb %al302; AVX1-NEXT:    vzeroupper303; AVX1-NEXT:    retq304;305; AVX2-LABEL: trunc_v16i16_v16i1:306; AVX2:       # %bb.0:307; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [281479271743489,281479271743489,281479271743489,281479271743489]308; AVX2-NEXT:    vptest %ymm1, %ymm0309; AVX2-NEXT:    setb %al310; AVX2-NEXT:    vzeroupper311; AVX2-NEXT:    retq312;313; AVX512-LABEL: trunc_v16i16_v16i1:314; AVX512:       # %bb.0:315; AVX512-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [281479271743489,281479271743489,281479271743489,281479271743489]316; AVX512-NEXT:    vptest %ymm1, %ymm0317; AVX512-NEXT:    setb %al318; AVX512-NEXT:    vzeroupper319; AVX512-NEXT:    retq320  %a = trunc <16 x i16> %0 to <16 x i1>321  %b = call i1 @llvm.vector.reduce.and.v16i1(<16 x i1> %a)322  ret i1 %b323}324 325define i1 @trunc_v32i8_v32i1(<32 x i8>) nounwind {326; SSE2-LABEL: trunc_v32i8_v32i1:327; SSE2:       # %bb.0:328; SSE2-NEXT:    pand %xmm1, %xmm0329; SSE2-NEXT:    psllw $7, %xmm0330; SSE2-NEXT:    pmovmskb %xmm0, %eax331; SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF332; SSE2-NEXT:    sete %al333; SSE2-NEXT:    ret{{[l|q]}}334;335; SSE41-LABEL: trunc_v32i8_v32i1:336; SSE41:       # %bb.0:337; SSE41-NEXT:    pand %xmm1, %xmm0338; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0339; SSE41-NEXT:    setb %al340; SSE41-NEXT:    retq341;342; AVX1-LABEL: trunc_v32i8_v32i1:343; AVX1:       # %bb.0:344; AVX1-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0345; AVX1-NEXT:    setb %al346; AVX1-NEXT:    vzeroupper347; AVX1-NEXT:    retq348;349; AVX2-LABEL: trunc_v32i8_v32i1:350; AVX2:       # %bb.0:351; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [72340172838076673,72340172838076673,72340172838076673,72340172838076673]352; AVX2-NEXT:    vptest %ymm1, %ymm0353; AVX2-NEXT:    setb %al354; AVX2-NEXT:    vzeroupper355; AVX2-NEXT:    retq356;357; AVX512-LABEL: trunc_v32i8_v32i1:358; AVX512:       # %bb.0:359; AVX512-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [72340172838076673,72340172838076673,72340172838076673,72340172838076673]360; AVX512-NEXT:    vptest %ymm1, %ymm0361; AVX512-NEXT:    setb %al362; AVX512-NEXT:    vzeroupper363; AVX512-NEXT:    retq364  %a = trunc <32 x i8> %0 to <32 x i1>365  %b = call i1 @llvm.vector.reduce.and.v32i1(<32 x i1> %a)366  ret i1 %b367}368 369define i1 @trunc_v8i64_v8i1(<8 x i64>) nounwind {370; X86-SSE2-LABEL: trunc_v8i64_v8i1:371; X86-SSE2:       # %bb.0:372; X86-SSE2-NEXT:    pushl %ebp373; X86-SSE2-NEXT:    movl %esp, %ebp374; X86-SSE2-NEXT:    andl $-16, %esp375; X86-SSE2-NEXT:    subl $16, %esp376; X86-SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]377; X86-SSE2-NEXT:    pslld $16, %xmm0378; X86-SSE2-NEXT:    psrad $16, %xmm0379; X86-SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,2],mem[0,2]380; X86-SSE2-NEXT:    pslld $16, %xmm2381; X86-SSE2-NEXT:    psrad $16, %xmm2382; X86-SSE2-NEXT:    packssdw %xmm2, %xmm0383; X86-SSE2-NEXT:    psllw $15, %xmm0384; X86-SSE2-NEXT:    packsswb %xmm0, %xmm0385; X86-SSE2-NEXT:    pmovmskb %xmm0, %eax386; X86-SSE2-NEXT:    cmpb $-1, %al387; X86-SSE2-NEXT:    sete %al388; X86-SSE2-NEXT:    movl %ebp, %esp389; X86-SSE2-NEXT:    popl %ebp390; X86-SSE2-NEXT:    retl391;392; X64-SSE2-LABEL: trunc_v8i64_v8i1:393; X64-SSE2:       # %bb.0:394; X64-SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,2],xmm3[0,2]395; X64-SSE2-NEXT:    pslld $16, %xmm2396; X64-SSE2-NEXT:    psrad $16, %xmm2397; X64-SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]398; X64-SSE2-NEXT:    pslld $16, %xmm0399; X64-SSE2-NEXT:    psrad $16, %xmm0400; X64-SSE2-NEXT:    packssdw %xmm2, %xmm0401; X64-SSE2-NEXT:    psllw $15, %xmm0402; X64-SSE2-NEXT:    packsswb %xmm0, %xmm0403; X64-SSE2-NEXT:    pmovmskb %xmm0, %eax404; X64-SSE2-NEXT:    cmpb $-1, %al405; X64-SSE2-NEXT:    sete %al406; X64-SSE2-NEXT:    retq407;408; SSE41-LABEL: trunc_v8i64_v8i1:409; SSE41:       # %bb.0:410; SSE41-NEXT:    pand %xmm3, %xmm1411; SSE41-NEXT:    pand %xmm2, %xmm0412; SSE41-NEXT:    pand %xmm1, %xmm0413; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0414; SSE41-NEXT:    setb %al415; SSE41-NEXT:    retq416;417; AVX1-LABEL: trunc_v8i64_v8i1:418; AVX1:       # %bb.0:419; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm0420; AVX1-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0421; AVX1-NEXT:    setb %al422; AVX1-NEXT:    vzeroupper423; AVX1-NEXT:    retq424;425; AVX2-LABEL: trunc_v8i64_v8i1:426; AVX2:       # %bb.0:427; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0428; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [1,1,1,1]429; AVX2-NEXT:    vptest %ymm1, %ymm0430; AVX2-NEXT:    setb %al431; AVX2-NEXT:    vzeroupper432; AVX2-NEXT:    retq433;434; AVX512-LABEL: trunc_v8i64_v8i1:435; AVX512:       # %bb.0:436; AVX512-NEXT:    vpbroadcastq {{.*#+}} zmm1 = [1,1,1,1,1,1,1,1]437; AVX512-NEXT:    vpandq %zmm1, %zmm0, %zmm0438; AVX512-NEXT:    vpcmpneqd %zmm1, %zmm0, %k0439; AVX512-NEXT:    kortestw %k0, %k0440; AVX512-NEXT:    sete %al441; AVX512-NEXT:    vzeroupper442; AVX512-NEXT:    retq443  %a = trunc <8 x i64> %0 to <8 x i1>444  %b = call i1 @llvm.vector.reduce.and.v8i1(<8 x i1> %a)445  ret i1 %b446}447 448define i1 @trunc_v16i32_v16i1(<16 x i32>) nounwind {449; X86-SSE2-LABEL: trunc_v16i32_v16i1:450; X86-SSE2:       # %bb.0:451; X86-SSE2-NEXT:    pushl %ebp452; X86-SSE2-NEXT:    movl %esp, %ebp453; X86-SSE2-NEXT:    andl $-16, %esp454; X86-SSE2-NEXT:    subl $16, %esp455; X86-SSE2-NEXT:    pand %xmm2, %xmm0456; X86-SSE2-NEXT:    pand 8(%ebp), %xmm1457; X86-SSE2-NEXT:    pand %xmm0, %xmm1458; X86-SSE2-NEXT:    pslld $31, %xmm1459; X86-SSE2-NEXT:    movmskps %xmm1, %eax460; X86-SSE2-NEXT:    xorl $15, %eax461; X86-SSE2-NEXT:    sete %al462; X86-SSE2-NEXT:    movl %ebp, %esp463; X86-SSE2-NEXT:    popl %ebp464; X86-SSE2-NEXT:    retl465;466; X64-SSE2-LABEL: trunc_v16i32_v16i1:467; X64-SSE2:       # %bb.0:468; X64-SSE2-NEXT:    pand %xmm3, %xmm1469; X64-SSE2-NEXT:    pand %xmm2, %xmm0470; X64-SSE2-NEXT:    pand %xmm1, %xmm0471; X64-SSE2-NEXT:    pslld $31, %xmm0472; X64-SSE2-NEXT:    movmskps %xmm0, %eax473; X64-SSE2-NEXT:    xorl $15, %eax474; X64-SSE2-NEXT:    sete %al475; X64-SSE2-NEXT:    retq476;477; SSE41-LABEL: trunc_v16i32_v16i1:478; SSE41:       # %bb.0:479; SSE41-NEXT:    pand %xmm3, %xmm1480; SSE41-NEXT:    pand %xmm2, %xmm0481; SSE41-NEXT:    pand %xmm1, %xmm0482; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0483; SSE41-NEXT:    setb %al484; SSE41-NEXT:    retq485;486; AVX1-LABEL: trunc_v16i32_v16i1:487; AVX1:       # %bb.0:488; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm0489; AVX1-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0490; AVX1-NEXT:    setb %al491; AVX1-NEXT:    vzeroupper492; AVX1-NEXT:    retq493;494; AVX2-LABEL: trunc_v16i32_v16i1:495; AVX2:       # %bb.0:496; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0497; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4294967297,4294967297,4294967297,4294967297]498; AVX2-NEXT:    vptest %ymm1, %ymm0499; AVX2-NEXT:    setb %al500; AVX2-NEXT:    vzeroupper501; AVX2-NEXT:    retq502;503; AVX512-LABEL: trunc_v16i32_v16i1:504; AVX512:       # %bb.0:505; AVX512-NEXT:    vptestnmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %k0506; AVX512-NEXT:    kortestw %k0, %k0507; AVX512-NEXT:    sete %al508; AVX512-NEXT:    vzeroupper509; AVX512-NEXT:    retq510  %a = trunc <16 x i32> %0 to <16 x i1>511  %b = call i1 @llvm.vector.reduce.and.v16i1(<16 x i1> %a)512  ret i1 %b513}514 515define i1 @trunc_v32i16_v32i1(<32 x i16>) nounwind {516; X86-SSE2-LABEL: trunc_v32i16_v32i1:517; X86-SSE2:       # %bb.0:518; X86-SSE2-NEXT:    pushl %ebp519; X86-SSE2-NEXT:    movl %esp, %ebp520; X86-SSE2-NEXT:    andl $-16, %esp521; X86-SSE2-NEXT:    subl $16, %esp522; X86-SSE2-NEXT:    pand %xmm2, %xmm0523; X86-SSE2-NEXT:    pand 8(%ebp), %xmm1524; X86-SSE2-NEXT:    pand %xmm0, %xmm1525; X86-SSE2-NEXT:    psllw $7, %xmm1526; X86-SSE2-NEXT:    pmovmskb %xmm1, %eax527; X86-SSE2-NEXT:    notl %eax528; X86-SSE2-NEXT:    testl $21845, %eax # imm = 0x5555529; X86-SSE2-NEXT:    sete %al530; X86-SSE2-NEXT:    movl %ebp, %esp531; X86-SSE2-NEXT:    popl %ebp532; X86-SSE2-NEXT:    retl533;534; X64-SSE2-LABEL: trunc_v32i16_v32i1:535; X64-SSE2:       # %bb.0:536; X64-SSE2-NEXT:    pand %xmm3, %xmm1537; X64-SSE2-NEXT:    pand %xmm2, %xmm0538; X64-SSE2-NEXT:    pand %xmm1, %xmm0539; X64-SSE2-NEXT:    psllw $7, %xmm0540; X64-SSE2-NEXT:    pmovmskb %xmm0, %eax541; X64-SSE2-NEXT:    notl %eax542; X64-SSE2-NEXT:    testl $21845, %eax # imm = 0x5555543; X64-SSE2-NEXT:    sete %al544; X64-SSE2-NEXT:    retq545;546; SSE41-LABEL: trunc_v32i16_v32i1:547; SSE41:       # %bb.0:548; SSE41-NEXT:    pand %xmm3, %xmm1549; SSE41-NEXT:    pand %xmm2, %xmm0550; SSE41-NEXT:    pand %xmm1, %xmm0551; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0552; SSE41-NEXT:    setb %al553; SSE41-NEXT:    retq554;555; AVX1-LABEL: trunc_v32i16_v32i1:556; AVX1:       # %bb.0:557; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm0558; AVX1-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0559; AVX1-NEXT:    setb %al560; AVX1-NEXT:    vzeroupper561; AVX1-NEXT:    retq562;563; AVX2-LABEL: trunc_v32i16_v32i1:564; AVX2:       # %bb.0:565; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0566; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [281479271743489,281479271743489,281479271743489,281479271743489]567; AVX2-NEXT:    vptest %ymm1, %ymm0568; AVX2-NEXT:    setb %al569; AVX2-NEXT:    vzeroupper570; AVX2-NEXT:    retq571;572; AVX512F-LABEL: trunc_v32i16_v32i1:573; AVX512F:       # %bb.0:574; AVX512F-NEXT:    vpbroadcastd {{.*#+}} zmm1 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]575; AVX512F-NEXT:    vpandq %zmm1, %zmm0, %zmm0576; AVX512F-NEXT:    vpcmpneqd %zmm1, %zmm0, %k0577; AVX512F-NEXT:    kortestw %k0, %k0578; AVX512F-NEXT:    sete %al579; AVX512F-NEXT:    vzeroupper580; AVX512F-NEXT:    retq581;582; AVX512BW-LABEL: trunc_v32i16_v32i1:583; AVX512BW:       # %bb.0:584; AVX512BW-NEXT:    vpbroadcastw {{.*#+}} zmm1 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]585; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm0586; AVX512BW-NEXT:    vpcmpneqd %zmm1, %zmm0, %k0587; AVX512BW-NEXT:    kortestw %k0, %k0588; AVX512BW-NEXT:    sete %al589; AVX512BW-NEXT:    vzeroupper590; AVX512BW-NEXT:    retq591;592; AVX512VL-LABEL: trunc_v32i16_v32i1:593; AVX512VL:       # %bb.0:594; AVX512VL-NEXT:    vpbroadcastw {{.*#+}} zmm1 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]595; AVX512VL-NEXT:    vpandq %zmm1, %zmm0, %zmm0596; AVX512VL-NEXT:    vpcmpneqd %zmm1, %zmm0, %k0597; AVX512VL-NEXT:    kortestw %k0, %k0598; AVX512VL-NEXT:    sete %al599; AVX512VL-NEXT:    vzeroupper600; AVX512VL-NEXT:    retq601  %a = trunc <32 x i16> %0 to <32 x i1>602  %b = call i1 @llvm.vector.reduce.and.v32i1(<32 x i1> %a)603  ret i1 %b604}605 606define i1 @trunc_v64i8_v64i1(<64 x i8>) nounwind {607; X86-SSE2-LABEL: trunc_v64i8_v64i1:608; X86-SSE2:       # %bb.0:609; X86-SSE2-NEXT:    pushl %ebp610; X86-SSE2-NEXT:    movl %esp, %ebp611; X86-SSE2-NEXT:    andl $-16, %esp612; X86-SSE2-NEXT:    subl $16, %esp613; X86-SSE2-NEXT:    pand %xmm2, %xmm0614; X86-SSE2-NEXT:    pand 8(%ebp), %xmm1615; X86-SSE2-NEXT:    pand %xmm0, %xmm1616; X86-SSE2-NEXT:    psllw $7, %xmm1617; X86-SSE2-NEXT:    pmovmskb %xmm1, %eax618; X86-SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF619; X86-SSE2-NEXT:    sete %al620; X86-SSE2-NEXT:    movl %ebp, %esp621; X86-SSE2-NEXT:    popl %ebp622; X86-SSE2-NEXT:    retl623;624; X64-SSE2-LABEL: trunc_v64i8_v64i1:625; X64-SSE2:       # %bb.0:626; X64-SSE2-NEXT:    pand %xmm3, %xmm1627; X64-SSE2-NEXT:    pand %xmm2, %xmm0628; X64-SSE2-NEXT:    pand %xmm1, %xmm0629; X64-SSE2-NEXT:    psllw $7, %xmm0630; X64-SSE2-NEXT:    pmovmskb %xmm0, %eax631; X64-SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF632; X64-SSE2-NEXT:    sete %al633; X64-SSE2-NEXT:    retq634;635; SSE41-LABEL: trunc_v64i8_v64i1:636; SSE41:       # %bb.0:637; SSE41-NEXT:    pand %xmm3, %xmm1638; SSE41-NEXT:    pand %xmm2, %xmm0639; SSE41-NEXT:    pand %xmm1, %xmm0640; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0641; SSE41-NEXT:    setb %al642; SSE41-NEXT:    retq643;644; AVX1-LABEL: trunc_v64i8_v64i1:645; AVX1:       # %bb.0:646; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm0647; AVX1-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0648; AVX1-NEXT:    setb %al649; AVX1-NEXT:    vzeroupper650; AVX1-NEXT:    retq651;652; AVX2-LABEL: trunc_v64i8_v64i1:653; AVX2:       # %bb.0:654; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0655; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [72340172838076673,72340172838076673,72340172838076673,72340172838076673]656; AVX2-NEXT:    vptest %ymm1, %ymm0657; AVX2-NEXT:    setb %al658; AVX2-NEXT:    vzeroupper659; AVX2-NEXT:    retq660;661; AVX512F-LABEL: trunc_v64i8_v64i1:662; AVX512F:       # %bb.0:663; AVX512F-NEXT:    vpbroadcastd {{.*#+}} zmm1 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]664; AVX512F-NEXT:    vpandq %zmm1, %zmm0, %zmm0665; AVX512F-NEXT:    vpcmpneqd %zmm1, %zmm0, %k0666; AVX512F-NEXT:    kortestw %k0, %k0667; AVX512F-NEXT:    sete %al668; AVX512F-NEXT:    vzeroupper669; AVX512F-NEXT:    retq670;671; AVX512BW-LABEL: trunc_v64i8_v64i1:672; AVX512BW:       # %bb.0:673; AVX512BW-NEXT:    vpbroadcastb {{.*#+}} zmm1 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]674; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm0675; AVX512BW-NEXT:    vpcmpneqd %zmm1, %zmm0, %k0676; AVX512BW-NEXT:    kortestw %k0, %k0677; AVX512BW-NEXT:    sete %al678; AVX512BW-NEXT:    vzeroupper679; AVX512BW-NEXT:    retq680;681; AVX512VL-LABEL: trunc_v64i8_v64i1:682; AVX512VL:       # %bb.0:683; AVX512VL-NEXT:    vpbroadcastb {{.*#+}} zmm1 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]684; AVX512VL-NEXT:    vpandq %zmm1, %zmm0, %zmm0685; AVX512VL-NEXT:    vpcmpneqd %zmm1, %zmm0, %k0686; AVX512VL-NEXT:    kortestw %k0, %k0687; AVX512VL-NEXT:    sete %al688; AVX512VL-NEXT:    vzeroupper689; AVX512VL-NEXT:    retq690  %a = trunc <64 x i8> %0 to <64 x i1>691  %b = call i1 @llvm.vector.reduce.and.v64i1(<64 x i1> %a)692  ret i1 %b693}694 695;696; Comparison With Zero697;698 699define i1 @icmp0_v2i64_v2i1(<2 x i64>) nounwind {700; SSE2-LABEL: icmp0_v2i64_v2i1:701; SSE2:       # %bb.0:702; SSE2-NEXT:    pxor %xmm1, %xmm1703; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1704; SSE2-NEXT:    movmskps %xmm1, %eax705; SSE2-NEXT:    xorl $15, %eax706; SSE2-NEXT:    sete %al707; SSE2-NEXT:    ret{{[l|q]}}708;709; SSE41-LABEL: icmp0_v2i64_v2i1:710; SSE41:       # %bb.0:711; SSE41-NEXT:    ptest %xmm0, %xmm0712; SSE41-NEXT:    sete %al713; SSE41-NEXT:    retq714;715; AVX-LABEL: icmp0_v2i64_v2i1:716; AVX:       # %bb.0:717; AVX-NEXT:    vptest %xmm0, %xmm0718; AVX-NEXT:    sete %al719; AVX-NEXT:    retq720  %a = icmp eq <2 x i64> %0, zeroinitializer721  %b = call i1 @llvm.vector.reduce.and.v2i1(<2 x i1> %a)722  ret i1 %b723}724 725define i1 @icmp0_v4i32_v4i1(<4 x i32>) nounwind {726; SSE2-LABEL: icmp0_v4i32_v4i1:727; SSE2:       # %bb.0:728; SSE2-NEXT:    pxor %xmm1, %xmm1729; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1730; SSE2-NEXT:    movmskps %xmm1, %eax731; SSE2-NEXT:    xorl $15, %eax732; SSE2-NEXT:    sete %al733; SSE2-NEXT:    ret{{[l|q]}}734;735; SSE41-LABEL: icmp0_v4i32_v4i1:736; SSE41:       # %bb.0:737; SSE41-NEXT:    ptest %xmm0, %xmm0738; SSE41-NEXT:    sete %al739; SSE41-NEXT:    retq740;741; AVX-LABEL: icmp0_v4i32_v4i1:742; AVX:       # %bb.0:743; AVX-NEXT:    vptest %xmm0, %xmm0744; AVX-NEXT:    sete %al745; AVX-NEXT:    retq746  %a = icmp eq <4 x i32> %0, zeroinitializer747  %b = call i1 @llvm.vector.reduce.and.v4i1(<4 x i1> %a)748  ret i1 %b749}750 751define i1 @icmp0_v8i16_v8i1(<8 x i16>) nounwind {752; SSE2-LABEL: icmp0_v8i16_v8i1:753; SSE2:       # %bb.0:754; SSE2-NEXT:    pxor %xmm1, %xmm1755; SSE2-NEXT:    pcmpeqb %xmm0, %xmm1756; SSE2-NEXT:    pmovmskb %xmm1, %eax757; SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF758; SSE2-NEXT:    sete %al759; SSE2-NEXT:    ret{{[l|q]}}760;761; SSE41-LABEL: icmp0_v8i16_v8i1:762; SSE41:       # %bb.0:763; SSE41-NEXT:    ptest %xmm0, %xmm0764; SSE41-NEXT:    sete %al765; SSE41-NEXT:    retq766;767; AVX-LABEL: icmp0_v8i16_v8i1:768; AVX:       # %bb.0:769; AVX-NEXT:    vptest %xmm0, %xmm0770; AVX-NEXT:    sete %al771; AVX-NEXT:    retq772  %a = icmp eq <8 x i16> %0, zeroinitializer773  %b = call i1 @llvm.vector.reduce.and.v8i1(<8 x i1> %a)774  ret i1 %b775}776 777define i1 @icmp0_v16i8_v16i1(<16 x i8>) nounwind {778; SSE2-LABEL: icmp0_v16i8_v16i1:779; SSE2:       # %bb.0:780; SSE2-NEXT:    pxor %xmm1, %xmm1781; SSE2-NEXT:    pcmpeqb %xmm0, %xmm1782; SSE2-NEXT:    pmovmskb %xmm1, %eax783; SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF784; SSE2-NEXT:    sete %al785; SSE2-NEXT:    ret{{[l|q]}}786;787; SSE41-LABEL: icmp0_v16i8_v16i1:788; SSE41:       # %bb.0:789; SSE41-NEXT:    ptest %xmm0, %xmm0790; SSE41-NEXT:    sete %al791; SSE41-NEXT:    retq792;793; AVX-LABEL: icmp0_v16i8_v16i1:794; AVX:       # %bb.0:795; AVX-NEXT:    vptest %xmm0, %xmm0796; AVX-NEXT:    sete %al797; AVX-NEXT:    retq798  %a = icmp eq <16 x i8> %0, zeroinitializer799  %b = call i1 @llvm.vector.reduce.and.v16i1(<16 x i1> %a)800  ret i1 %b801}802 803define i1 @icmp0_v4i64_v4i1(<4 x i64>) nounwind {804; SSE2-LABEL: icmp0_v4i64_v4i1:805; SSE2:       # %bb.0:806; SSE2-NEXT:    por %xmm1, %xmm0807; SSE2-NEXT:    pxor %xmm1, %xmm1808; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1809; SSE2-NEXT:    movmskps %xmm1, %eax810; SSE2-NEXT:    xorl $15, %eax811; SSE2-NEXT:    sete %al812; SSE2-NEXT:    ret{{[l|q]}}813;814; SSE41-LABEL: icmp0_v4i64_v4i1:815; SSE41:       # %bb.0:816; SSE41-NEXT:    por %xmm1, %xmm0817; SSE41-NEXT:    ptest %xmm0, %xmm0818; SSE41-NEXT:    sete %al819; SSE41-NEXT:    retq820;821; AVX-LABEL: icmp0_v4i64_v4i1:822; AVX:       # %bb.0:823; AVX-NEXT:    vptest %ymm0, %ymm0824; AVX-NEXT:    sete %al825; AVX-NEXT:    vzeroupper826; AVX-NEXT:    retq827  %a = icmp eq <4 x i64> %0, zeroinitializer828  %b = call i1 @llvm.vector.reduce.and.v4i1(<4 x i1> %a)829  ret i1 %b830}831 832define i1 @icmp0_v8i32_v8i1(<8 x i32>) nounwind {833; SSE2-LABEL: icmp0_v8i32_v8i1:834; SSE2:       # %bb.0:835; SSE2-NEXT:    por %xmm1, %xmm0836; SSE2-NEXT:    pxor %xmm1, %xmm1837; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1838; SSE2-NEXT:    movmskps %xmm1, %eax839; SSE2-NEXT:    xorl $15, %eax840; SSE2-NEXT:    sete %al841; SSE2-NEXT:    ret{{[l|q]}}842;843; SSE41-LABEL: icmp0_v8i32_v8i1:844; SSE41:       # %bb.0:845; SSE41-NEXT:    por %xmm1, %xmm0846; SSE41-NEXT:    ptest %xmm0, %xmm0847; SSE41-NEXT:    sete %al848; SSE41-NEXT:    retq849;850; AVX-LABEL: icmp0_v8i32_v8i1:851; AVX:       # %bb.0:852; AVX-NEXT:    vptest %ymm0, %ymm0853; AVX-NEXT:    sete %al854; AVX-NEXT:    vzeroupper855; AVX-NEXT:    retq856  %a = icmp eq <8 x i32> %0, zeroinitializer857  %b = call i1 @llvm.vector.reduce.and.v8i1(<8 x i1> %a)858  ret i1 %b859}860 861define i1 @icmp0_v16i16_v16i1(<16 x i16>) nounwind {862; SSE2-LABEL: icmp0_v16i16_v16i1:863; SSE2:       # %bb.0:864; SSE2-NEXT:    por %xmm1, %xmm0865; SSE2-NEXT:    pxor %xmm1, %xmm1866; SSE2-NEXT:    pcmpeqb %xmm0, %xmm1867; SSE2-NEXT:    pmovmskb %xmm1, %eax868; SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF869; SSE2-NEXT:    sete %al870; SSE2-NEXT:    ret{{[l|q]}}871;872; SSE41-LABEL: icmp0_v16i16_v16i1:873; SSE41:       # %bb.0:874; SSE41-NEXT:    por %xmm1, %xmm0875; SSE41-NEXT:    ptest %xmm0, %xmm0876; SSE41-NEXT:    sete %al877; SSE41-NEXT:    retq878;879; AVX-LABEL: icmp0_v16i16_v16i1:880; AVX:       # %bb.0:881; AVX-NEXT:    vptest %ymm0, %ymm0882; AVX-NEXT:    sete %al883; AVX-NEXT:    vzeroupper884; AVX-NEXT:    retq885  %a = icmp eq <16 x i16> %0, zeroinitializer886  %b = call i1 @llvm.vector.reduce.and.v16i1(<16 x i1> %a)887  ret i1 %b888}889 890define i1 @icmp0_v32i8_v32i1(<32 x i8>) nounwind {891; SSE2-LABEL: icmp0_v32i8_v32i1:892; SSE2:       # %bb.0:893; SSE2-NEXT:    por %xmm1, %xmm0894; SSE2-NEXT:    pxor %xmm1, %xmm1895; SSE2-NEXT:    pcmpeqb %xmm0, %xmm1896; SSE2-NEXT:    pmovmskb %xmm1, %eax897; SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF898; SSE2-NEXT:    sete %al899; SSE2-NEXT:    ret{{[l|q]}}900;901; SSE41-LABEL: icmp0_v32i8_v32i1:902; SSE41:       # %bb.0:903; SSE41-NEXT:    por %xmm1, %xmm0904; SSE41-NEXT:    ptest %xmm0, %xmm0905; SSE41-NEXT:    sete %al906; SSE41-NEXT:    retq907;908; AVX-LABEL: icmp0_v32i8_v32i1:909; AVX:       # %bb.0:910; AVX-NEXT:    vptest %ymm0, %ymm0911; AVX-NEXT:    sete %al912; AVX-NEXT:    vzeroupper913; AVX-NEXT:    retq914  %a = icmp eq <32 x i8> %0, zeroinitializer915  %b = call i1 @llvm.vector.reduce.and.v32i1(<32 x i1> %a)916  ret i1 %b917}918 919define i1 @icmp0_v8i64_v8i1(<8 x i64>) nounwind {920; X86-SSE2-LABEL: icmp0_v8i64_v8i1:921; X86-SSE2:       # %bb.0:922; X86-SSE2-NEXT:    pushl %ebp923; X86-SSE2-NEXT:    movl %esp, %ebp924; X86-SSE2-NEXT:    andl $-16, %esp925; X86-SSE2-NEXT:    subl $16, %esp926; X86-SSE2-NEXT:    por %xmm2, %xmm0927; X86-SSE2-NEXT:    por 8(%ebp), %xmm1928; X86-SSE2-NEXT:    por %xmm0, %xmm1929; X86-SSE2-NEXT:    pxor %xmm0, %xmm0930; X86-SSE2-NEXT:    pcmpeqd %xmm1, %xmm0931; X86-SSE2-NEXT:    movmskps %xmm0, %eax932; X86-SSE2-NEXT:    xorl $15, %eax933; X86-SSE2-NEXT:    sete %al934; X86-SSE2-NEXT:    movl %ebp, %esp935; X86-SSE2-NEXT:    popl %ebp936; X86-SSE2-NEXT:    retl937;938; X64-SSE2-LABEL: icmp0_v8i64_v8i1:939; X64-SSE2:       # %bb.0:940; X64-SSE2-NEXT:    por %xmm3, %xmm1941; X64-SSE2-NEXT:    por %xmm2, %xmm0942; X64-SSE2-NEXT:    por %xmm1, %xmm0943; X64-SSE2-NEXT:    pxor %xmm1, %xmm1944; X64-SSE2-NEXT:    pcmpeqd %xmm0, %xmm1945; X64-SSE2-NEXT:    movmskps %xmm1, %eax946; X64-SSE2-NEXT:    xorl $15, %eax947; X64-SSE2-NEXT:    sete %al948; X64-SSE2-NEXT:    retq949;950; SSE41-LABEL: icmp0_v8i64_v8i1:951; SSE41:       # %bb.0:952; SSE41-NEXT:    por %xmm3, %xmm1953; SSE41-NEXT:    por %xmm2, %xmm0954; SSE41-NEXT:    por %xmm1, %xmm0955; SSE41-NEXT:    ptest %xmm0, %xmm0956; SSE41-NEXT:    sete %al957; SSE41-NEXT:    retq958;959; AVX1-LABEL: icmp0_v8i64_v8i1:960; AVX1:       # %bb.0:961; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm0962; AVX1-NEXT:    vptest %ymm0, %ymm0963; AVX1-NEXT:    sete %al964; AVX1-NEXT:    vzeroupper965; AVX1-NEXT:    retq966;967; AVX2-LABEL: icmp0_v8i64_v8i1:968; AVX2:       # %bb.0:969; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm0970; AVX2-NEXT:    vptest %ymm0, %ymm0971; AVX2-NEXT:    sete %al972; AVX2-NEXT:    vzeroupper973; AVX2-NEXT:    retq974;975; AVX512-LABEL: icmp0_v8i64_v8i1:976; AVX512:       # %bb.0:977; AVX512-NEXT:    vptestmd %zmm0, %zmm0, %k0978; AVX512-NEXT:    kortestw %k0, %k0979; AVX512-NEXT:    sete %al980; AVX512-NEXT:    vzeroupper981; AVX512-NEXT:    retq982  %a = icmp eq <8 x i64> %0, zeroinitializer983  %b = call i1 @llvm.vector.reduce.and.v8i1(<8 x i1> %a)984  ret i1 %b985}986 987define i1 @icmp0_v16i32_v16i1(<16 x i32>) nounwind {988; X86-SSE2-LABEL: icmp0_v16i32_v16i1:989; X86-SSE2:       # %bb.0:990; X86-SSE2-NEXT:    pushl %ebp991; X86-SSE2-NEXT:    movl %esp, %ebp992; X86-SSE2-NEXT:    andl $-16, %esp993; X86-SSE2-NEXT:    subl $16, %esp994; X86-SSE2-NEXT:    por %xmm2, %xmm0995; X86-SSE2-NEXT:    por 8(%ebp), %xmm1996; X86-SSE2-NEXT:    por %xmm0, %xmm1997; X86-SSE2-NEXT:    pxor %xmm0, %xmm0998; X86-SSE2-NEXT:    pcmpeqd %xmm1, %xmm0999; X86-SSE2-NEXT:    movmskps %xmm0, %eax1000; X86-SSE2-NEXT:    xorl $15, %eax1001; X86-SSE2-NEXT:    sete %al1002; X86-SSE2-NEXT:    movl %ebp, %esp1003; X86-SSE2-NEXT:    popl %ebp1004; X86-SSE2-NEXT:    retl1005;1006; X64-SSE2-LABEL: icmp0_v16i32_v16i1:1007; X64-SSE2:       # %bb.0:1008; X64-SSE2-NEXT:    por %xmm3, %xmm11009; X64-SSE2-NEXT:    por %xmm2, %xmm01010; X64-SSE2-NEXT:    por %xmm1, %xmm01011; X64-SSE2-NEXT:    pxor %xmm1, %xmm11012; X64-SSE2-NEXT:    pcmpeqd %xmm0, %xmm11013; X64-SSE2-NEXT:    movmskps %xmm1, %eax1014; X64-SSE2-NEXT:    xorl $15, %eax1015; X64-SSE2-NEXT:    sete %al1016; X64-SSE2-NEXT:    retq1017;1018; SSE41-LABEL: icmp0_v16i32_v16i1:1019; SSE41:       # %bb.0:1020; SSE41-NEXT:    por %xmm3, %xmm11021; SSE41-NEXT:    por %xmm2, %xmm01022; SSE41-NEXT:    por %xmm1, %xmm01023; SSE41-NEXT:    ptest %xmm0, %xmm01024; SSE41-NEXT:    sete %al1025; SSE41-NEXT:    retq1026;1027; AVX1-LABEL: icmp0_v16i32_v16i1:1028; AVX1:       # %bb.0:1029; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01030; AVX1-NEXT:    vptest %ymm0, %ymm01031; AVX1-NEXT:    sete %al1032; AVX1-NEXT:    vzeroupper1033; AVX1-NEXT:    retq1034;1035; AVX2-LABEL: icmp0_v16i32_v16i1:1036; AVX2:       # %bb.0:1037; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01038; AVX2-NEXT:    vptest %ymm0, %ymm01039; AVX2-NEXT:    sete %al1040; AVX2-NEXT:    vzeroupper1041; AVX2-NEXT:    retq1042;1043; AVX512-LABEL: icmp0_v16i32_v16i1:1044; AVX512:       # %bb.0:1045; AVX512-NEXT:    vptestmd %zmm0, %zmm0, %k01046; AVX512-NEXT:    kortestw %k0, %k01047; AVX512-NEXT:    sete %al1048; AVX512-NEXT:    vzeroupper1049; AVX512-NEXT:    retq1050  %a = icmp eq <16 x i32> %0, zeroinitializer1051  %b = call i1 @llvm.vector.reduce.and.v16i1(<16 x i1> %a)1052  ret i1 %b1053}1054 1055define i1 @icmp0_v32i16_v32i1(<32 x i16>) nounwind {1056; X86-SSE2-LABEL: icmp0_v32i16_v32i1:1057; X86-SSE2:       # %bb.0:1058; X86-SSE2-NEXT:    pushl %ebp1059; X86-SSE2-NEXT:    movl %esp, %ebp1060; X86-SSE2-NEXT:    andl $-16, %esp1061; X86-SSE2-NEXT:    subl $16, %esp1062; X86-SSE2-NEXT:    por %xmm2, %xmm01063; X86-SSE2-NEXT:    por 8(%ebp), %xmm11064; X86-SSE2-NEXT:    por %xmm0, %xmm11065; X86-SSE2-NEXT:    pxor %xmm0, %xmm01066; X86-SSE2-NEXT:    pcmpeqb %xmm1, %xmm01067; X86-SSE2-NEXT:    pmovmskb %xmm0, %eax1068; X86-SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF1069; X86-SSE2-NEXT:    sete %al1070; X86-SSE2-NEXT:    movl %ebp, %esp1071; X86-SSE2-NEXT:    popl %ebp1072; X86-SSE2-NEXT:    retl1073;1074; X64-SSE2-LABEL: icmp0_v32i16_v32i1:1075; X64-SSE2:       # %bb.0:1076; X64-SSE2-NEXT:    por %xmm3, %xmm11077; X64-SSE2-NEXT:    por %xmm2, %xmm01078; X64-SSE2-NEXT:    por %xmm1, %xmm01079; X64-SSE2-NEXT:    pxor %xmm1, %xmm11080; X64-SSE2-NEXT:    pcmpeqb %xmm0, %xmm11081; X64-SSE2-NEXT:    pmovmskb %xmm1, %eax1082; X64-SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF1083; X64-SSE2-NEXT:    sete %al1084; X64-SSE2-NEXT:    retq1085;1086; SSE41-LABEL: icmp0_v32i16_v32i1:1087; SSE41:       # %bb.0:1088; SSE41-NEXT:    por %xmm3, %xmm11089; SSE41-NEXT:    por %xmm2, %xmm01090; SSE41-NEXT:    por %xmm1, %xmm01091; SSE41-NEXT:    ptest %xmm0, %xmm01092; SSE41-NEXT:    sete %al1093; SSE41-NEXT:    retq1094;1095; AVX1-LABEL: icmp0_v32i16_v32i1:1096; AVX1:       # %bb.0:1097; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01098; AVX1-NEXT:    vptest %ymm0, %ymm01099; AVX1-NEXT:    sete %al1100; AVX1-NEXT:    vzeroupper1101; AVX1-NEXT:    retq1102;1103; AVX2-LABEL: icmp0_v32i16_v32i1:1104; AVX2:       # %bb.0:1105; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01106; AVX2-NEXT:    vptest %ymm0, %ymm01107; AVX2-NEXT:    sete %al1108; AVX2-NEXT:    vzeroupper1109; AVX2-NEXT:    retq1110;1111; AVX512-LABEL: icmp0_v32i16_v32i1:1112; AVX512:       # %bb.0:1113; AVX512-NEXT:    vptestmd %zmm0, %zmm0, %k01114; AVX512-NEXT:    kortestw %k0, %k01115; AVX512-NEXT:    sete %al1116; AVX512-NEXT:    vzeroupper1117; AVX512-NEXT:    retq1118  %a = icmp eq <32 x i16> %0, zeroinitializer1119  %b = call i1 @llvm.vector.reduce.and.v32i1(<32 x i1> %a)1120  ret i1 %b1121}1122 1123define i1 @icmp0_v64i8_v64i1(<64 x i8>) nounwind {1124; X86-SSE2-LABEL: icmp0_v64i8_v64i1:1125; X86-SSE2:       # %bb.0:1126; X86-SSE2-NEXT:    pushl %ebp1127; X86-SSE2-NEXT:    movl %esp, %ebp1128; X86-SSE2-NEXT:    andl $-16, %esp1129; X86-SSE2-NEXT:    subl $16, %esp1130; X86-SSE2-NEXT:    por %xmm2, %xmm01131; X86-SSE2-NEXT:    por 8(%ebp), %xmm11132; X86-SSE2-NEXT:    por %xmm0, %xmm11133; X86-SSE2-NEXT:    pxor %xmm0, %xmm01134; X86-SSE2-NEXT:    pcmpeqb %xmm1, %xmm01135; X86-SSE2-NEXT:    pmovmskb %xmm0, %eax1136; X86-SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF1137; X86-SSE2-NEXT:    sete %al1138; X86-SSE2-NEXT:    movl %ebp, %esp1139; X86-SSE2-NEXT:    popl %ebp1140; X86-SSE2-NEXT:    retl1141;1142; X64-SSE2-LABEL: icmp0_v64i8_v64i1:1143; X64-SSE2:       # %bb.0:1144; X64-SSE2-NEXT:    por %xmm3, %xmm11145; X64-SSE2-NEXT:    por %xmm2, %xmm01146; X64-SSE2-NEXT:    por %xmm1, %xmm01147; X64-SSE2-NEXT:    pxor %xmm1, %xmm11148; X64-SSE2-NEXT:    pcmpeqb %xmm0, %xmm11149; X64-SSE2-NEXT:    pmovmskb %xmm1, %eax1150; X64-SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF1151; X64-SSE2-NEXT:    sete %al1152; X64-SSE2-NEXT:    retq1153;1154; SSE41-LABEL: icmp0_v64i8_v64i1:1155; SSE41:       # %bb.0:1156; SSE41-NEXT:    por %xmm3, %xmm11157; SSE41-NEXT:    por %xmm2, %xmm01158; SSE41-NEXT:    por %xmm1, %xmm01159; SSE41-NEXT:    ptest %xmm0, %xmm01160; SSE41-NEXT:    sete %al1161; SSE41-NEXT:    retq1162;1163; AVX1-LABEL: icmp0_v64i8_v64i1:1164; AVX1:       # %bb.0:1165; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01166; AVX1-NEXT:    vptest %ymm0, %ymm01167; AVX1-NEXT:    sete %al1168; AVX1-NEXT:    vzeroupper1169; AVX1-NEXT:    retq1170;1171; AVX2-LABEL: icmp0_v64i8_v64i1:1172; AVX2:       # %bb.0:1173; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01174; AVX2-NEXT:    vptest %ymm0, %ymm01175; AVX2-NEXT:    sete %al1176; AVX2-NEXT:    vzeroupper1177; AVX2-NEXT:    retq1178;1179; AVX512-LABEL: icmp0_v64i8_v64i1:1180; AVX512:       # %bb.0:1181; AVX512-NEXT:    vptestmd %zmm0, %zmm0, %k01182; AVX512-NEXT:    kortestw %k0, %k01183; AVX512-NEXT:    sete %al1184; AVX512-NEXT:    vzeroupper1185; AVX512-NEXT:    retq1186  %a = icmp eq <64 x i8> %0, zeroinitializer1187  %b = call i1 @llvm.vector.reduce.and.v64i1(<64 x i1> %a)1188  ret i1 %b1189}1190 1191define i8 @icmp0_v8i1(<8 x i8>) nounwind {1192; SSE2-LABEL: icmp0_v8i1:1193; SSE2:       # %bb.0:1194; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1195; SSE2-NEXT:    psllw $15, %xmm01196; SSE2-NEXT:    pmovmskb %xmm0, %eax1197; SSE2-NEXT:    testl $43690, %eax # imm = 0xAAAA1198; SSE2-NEXT:    sete %al1199; SSE2-NEXT:    ret{{[l|q]}}1200;1201; SSE41-LABEL: icmp0_v8i1:1202; SSE41:       # %bb.0:1203; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero1204; SSE41-NEXT:    psllw $15, %xmm01205; SSE41-NEXT:    pmovmskb %xmm0, %eax1206; SSE41-NEXT:    testl $43690, %eax # imm = 0xAAAA1207; SSE41-NEXT:    sete %al1208; SSE41-NEXT:    retq1209;1210; AVX1OR2-LABEL: icmp0_v8i1:1211; AVX1OR2:       # %bb.0:1212; AVX1OR2-NEXT:    vpmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero1213; AVX1OR2-NEXT:    vpsllw $15, %xmm0, %xmm01214; AVX1OR2-NEXT:    vpmovmskb %xmm0, %eax1215; AVX1OR2-NEXT:    testl $43690, %eax # imm = 0xAAAA1216; AVX1OR2-NEXT:    sete %al1217; AVX1OR2-NEXT:    retq1218;1219; AVX512F-LABEL: icmp0_v8i1:1220; AVX512F:       # %bb.0:1221; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm01222; AVX512F-NEXT:    vpslld $31, %zmm0, %zmm01223; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k01224; AVX512F-NEXT:    kmovw %k0, %eax1225; AVX512F-NEXT:    testb %al, %al1226; AVX512F-NEXT:    sete %al1227; AVX512F-NEXT:    vzeroupper1228; AVX512F-NEXT:    retq1229;1230; AVX512BW-LABEL: icmp0_v8i1:1231; AVX512BW:       # %bb.0:1232; AVX512BW-NEXT:    vpsllw $7, %xmm0, %xmm01233; AVX512BW-NEXT:    vpmovb2m %zmm0, %k01234; AVX512BW-NEXT:    kmovd %k0, %eax1235; AVX512BW-NEXT:    testb %al, %al1236; AVX512BW-NEXT:    sete %al1237; AVX512BW-NEXT:    vzeroupper1238; AVX512BW-NEXT:    retq1239;1240; AVX512VL-LABEL: icmp0_v8i1:1241; AVX512VL:       # %bb.0:1242; AVX512VL-NEXT:    vpsllw $7, %xmm0, %xmm01243; AVX512VL-NEXT:    vpmovb2m %xmm0, %k01244; AVX512VL-NEXT:    kmovd %k0, %eax1245; AVX512VL-NEXT:    testb %al, %al1246; AVX512VL-NEXT:    sete %al1247; AVX512VL-NEXT:    retq1248  %a = trunc <8 x i8> %0 to <8 x i1>1249  %b = icmp eq <8 x i1> %a, zeroinitializer1250  %c = call i1 @llvm.vector.reduce.and.v8i1(<8 x i1> %b)1251  %d = zext i1 %c to i81252  ret i8 %d1253}1254 1255;1256; Comparison With All Ones1257;1258 1259define i1 @icmp1_v2i64_v2i1(<2 x i64>) nounwind {1260; SSE2-LABEL: icmp1_v2i64_v2i1:1261; SSE2:       # %bb.0:1262; SSE2-NEXT:    pcmpeqd %xmm1, %xmm11263; SSE2-NEXT:    pcmpeqd %xmm0, %xmm11264; SSE2-NEXT:    movmskps %xmm1, %eax1265; SSE2-NEXT:    xorl $15, %eax1266; SSE2-NEXT:    sete %al1267; SSE2-NEXT:    ret{{[l|q]}}1268;1269; SSE41-LABEL: icmp1_v2i64_v2i1:1270; SSE41:       # %bb.0:1271; SSE41-NEXT:    pcmpeqd %xmm1, %xmm11272; SSE41-NEXT:    ptest %xmm1, %xmm01273; SSE41-NEXT:    setb %al1274; SSE41-NEXT:    retq1275;1276; AVX-LABEL: icmp1_v2i64_v2i1:1277; AVX:       # %bb.0:1278; AVX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11279; AVX-NEXT:    vptest %xmm1, %xmm01280; AVX-NEXT:    setb %al1281; AVX-NEXT:    retq1282  %a = icmp eq <2 x i64> %0, <i64 -1, i64 -1>1283  %b = call i1 @llvm.vector.reduce.and.v2i1(<2 x i1> %a)1284  ret i1 %b1285}1286 1287define i1 @icmp1_v4i32_v4i1(<4 x i32>) nounwind {1288; SSE2-LABEL: icmp1_v4i32_v4i1:1289; SSE2:       # %bb.0:1290; SSE2-NEXT:    pcmpeqd %xmm1, %xmm11291; SSE2-NEXT:    pcmpeqd %xmm0, %xmm11292; SSE2-NEXT:    movmskps %xmm1, %eax1293; SSE2-NEXT:    xorl $15, %eax1294; SSE2-NEXT:    sete %al1295; SSE2-NEXT:    ret{{[l|q]}}1296;1297; SSE41-LABEL: icmp1_v4i32_v4i1:1298; SSE41:       # %bb.0:1299; SSE41-NEXT:    pcmpeqd %xmm1, %xmm11300; SSE41-NEXT:    ptest %xmm1, %xmm01301; SSE41-NEXT:    setb %al1302; SSE41-NEXT:    retq1303;1304; AVX-LABEL: icmp1_v4i32_v4i1:1305; AVX:       # %bb.0:1306; AVX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11307; AVX-NEXT:    vptest %xmm1, %xmm01308; AVX-NEXT:    setb %al1309; AVX-NEXT:    retq1310  %a = icmp eq <4 x i32> %0, <i32 -1, i32 -1, i32 -1, i32 -1>1311  %b = call i1 @llvm.vector.reduce.and.v4i1(<4 x i1> %a)1312  ret i1 %b1313}1314 1315define i1 @icmp1_v8i16_v8i1(<8 x i16>) nounwind {1316; SSE2-LABEL: icmp1_v8i16_v8i1:1317; SSE2:       # %bb.0:1318; SSE2-NEXT:    pcmpeqd %xmm1, %xmm11319; SSE2-NEXT:    pcmpeqb %xmm0, %xmm11320; SSE2-NEXT:    pmovmskb %xmm1, %eax1321; SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF1322; SSE2-NEXT:    sete %al1323; SSE2-NEXT:    ret{{[l|q]}}1324;1325; SSE41-LABEL: icmp1_v8i16_v8i1:1326; SSE41:       # %bb.0:1327; SSE41-NEXT:    pcmpeqd %xmm1, %xmm11328; SSE41-NEXT:    ptest %xmm1, %xmm01329; SSE41-NEXT:    setb %al1330; SSE41-NEXT:    retq1331;1332; AVX-LABEL: icmp1_v8i16_v8i1:1333; AVX:       # %bb.0:1334; AVX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11335; AVX-NEXT:    vptest %xmm1, %xmm01336; AVX-NEXT:    setb %al1337; AVX-NEXT:    retq1338  %a = icmp eq <8 x i16> %0, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>1339  %b = call i1 @llvm.vector.reduce.and.v8i1(<8 x i1> %a)1340  ret i1 %b1341}1342 1343define i1 @icmp1_v16i8_v16i1(<16 x i8>) nounwind {1344; SSE2-LABEL: icmp1_v16i8_v16i1:1345; SSE2:       # %bb.0:1346; SSE2-NEXT:    pcmpeqd %xmm1, %xmm11347; SSE2-NEXT:    pcmpeqb %xmm0, %xmm11348; SSE2-NEXT:    pmovmskb %xmm1, %eax1349; SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF1350; SSE2-NEXT:    sete %al1351; SSE2-NEXT:    ret{{[l|q]}}1352;1353; SSE41-LABEL: icmp1_v16i8_v16i1:1354; SSE41:       # %bb.0:1355; SSE41-NEXT:    pcmpeqd %xmm1, %xmm11356; SSE41-NEXT:    ptest %xmm1, %xmm01357; SSE41-NEXT:    setb %al1358; SSE41-NEXT:    retq1359;1360; AVX-LABEL: icmp1_v16i8_v16i1:1361; AVX:       # %bb.0:1362; AVX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11363; AVX-NEXT:    vptest %xmm1, %xmm01364; AVX-NEXT:    setb %al1365; AVX-NEXT:    retq1366  %a = icmp eq <16 x i8> %0, <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>1367  %b = call i1 @llvm.vector.reduce.and.v16i1(<16 x i1> %a)1368  ret i1 %b1369}1370 1371define i1 @icmp1_v4i64_v4i1(<4 x i64>) nounwind {1372; SSE2-LABEL: icmp1_v4i64_v4i1:1373; SSE2:       # %bb.0:1374; SSE2-NEXT:    pand %xmm1, %xmm01375; SSE2-NEXT:    pcmpeqd %xmm1, %xmm11376; SSE2-NEXT:    pcmpeqd %xmm0, %xmm11377; SSE2-NEXT:    movmskps %xmm1, %eax1378; SSE2-NEXT:    xorl $15, %eax1379; SSE2-NEXT:    sete %al1380; SSE2-NEXT:    ret{{[l|q]}}1381;1382; SSE41-LABEL: icmp1_v4i64_v4i1:1383; SSE41:       # %bb.0:1384; SSE41-NEXT:    pand %xmm1, %xmm01385; SSE41-NEXT:    pcmpeqd %xmm1, %xmm11386; SSE41-NEXT:    ptest %xmm1, %xmm01387; SSE41-NEXT:    setb %al1388; SSE41-NEXT:    retq1389;1390; AVX1-LABEL: icmp1_v4i64_v4i1:1391; AVX1:       # %bb.0:1392; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm11393; AVX1-NEXT:    vcmptrueps %ymm1, %ymm1, %ymm11394; AVX1-NEXT:    vptest %ymm1, %ymm01395; AVX1-NEXT:    setb %al1396; AVX1-NEXT:    vzeroupper1397; AVX1-NEXT:    retq1398;1399; AVX2-LABEL: icmp1_v4i64_v4i1:1400; AVX2:       # %bb.0:1401; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm11402; AVX2-NEXT:    vptest %ymm1, %ymm01403; AVX2-NEXT:    setb %al1404; AVX2-NEXT:    vzeroupper1405; AVX2-NEXT:    retq1406;1407; AVX512-LABEL: icmp1_v4i64_v4i1:1408; AVX512:       # %bb.0:1409; AVX512-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm11410; AVX512-NEXT:    vptest %ymm1, %ymm01411; AVX512-NEXT:    setb %al1412; AVX512-NEXT:    vzeroupper1413; AVX512-NEXT:    retq1414  %a = icmp eq <4 x i64> %0, <i64 -1, i64 -1, i64 -1, i64 -1>1415  %b = call i1 @llvm.vector.reduce.and.v4i1(<4 x i1> %a)1416  ret i1 %b1417}1418 1419define i1 @icmp1_v8i32_v8i1(<8 x i32>) nounwind {1420; SSE2-LABEL: icmp1_v8i32_v8i1:1421; SSE2:       # %bb.0:1422; SSE2-NEXT:    pand %xmm1, %xmm01423; SSE2-NEXT:    pcmpeqd %xmm1, %xmm11424; SSE2-NEXT:    pcmpeqd %xmm0, %xmm11425; SSE2-NEXT:    movmskps %xmm1, %eax1426; SSE2-NEXT:    xorl $15, %eax1427; SSE2-NEXT:    sete %al1428; SSE2-NEXT:    ret{{[l|q]}}1429;1430; SSE41-LABEL: icmp1_v8i32_v8i1:1431; SSE41:       # %bb.0:1432; SSE41-NEXT:    pand %xmm1, %xmm01433; SSE41-NEXT:    pcmpeqd %xmm1, %xmm11434; SSE41-NEXT:    ptest %xmm1, %xmm01435; SSE41-NEXT:    setb %al1436; SSE41-NEXT:    retq1437;1438; AVX1-LABEL: icmp1_v8i32_v8i1:1439; AVX1:       # %bb.0:1440; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm11441; AVX1-NEXT:    vcmptrueps %ymm1, %ymm1, %ymm11442; AVX1-NEXT:    vptest %ymm1, %ymm01443; AVX1-NEXT:    setb %al1444; AVX1-NEXT:    vzeroupper1445; AVX1-NEXT:    retq1446;1447; AVX2-LABEL: icmp1_v8i32_v8i1:1448; AVX2:       # %bb.0:1449; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm11450; AVX2-NEXT:    vptest %ymm1, %ymm01451; AVX2-NEXT:    setb %al1452; AVX2-NEXT:    vzeroupper1453; AVX2-NEXT:    retq1454;1455; AVX512-LABEL: icmp1_v8i32_v8i1:1456; AVX512:       # %bb.0:1457; AVX512-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm11458; AVX512-NEXT:    vptest %ymm1, %ymm01459; AVX512-NEXT:    setb %al1460; AVX512-NEXT:    vzeroupper1461; AVX512-NEXT:    retq1462  %a = icmp eq <8 x i32> %0, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>1463  %b = call i1 @llvm.vector.reduce.and.v8i1(<8 x i1> %a)1464  ret i1 %b1465}1466 1467define i1 @icmp1_v16i16_v16i1(<16 x i16>) nounwind {1468; SSE2-LABEL: icmp1_v16i16_v16i1:1469; SSE2:       # %bb.0:1470; SSE2-NEXT:    pand %xmm1, %xmm01471; SSE2-NEXT:    pcmpeqd %xmm1, %xmm11472; SSE2-NEXT:    pcmpeqb %xmm0, %xmm11473; SSE2-NEXT:    pmovmskb %xmm1, %eax1474; SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF1475; SSE2-NEXT:    sete %al1476; SSE2-NEXT:    ret{{[l|q]}}1477;1478; SSE41-LABEL: icmp1_v16i16_v16i1:1479; SSE41:       # %bb.0:1480; SSE41-NEXT:    pand %xmm1, %xmm01481; SSE41-NEXT:    pcmpeqd %xmm1, %xmm11482; SSE41-NEXT:    ptest %xmm1, %xmm01483; SSE41-NEXT:    setb %al1484; SSE41-NEXT:    retq1485;1486; AVX1-LABEL: icmp1_v16i16_v16i1:1487; AVX1:       # %bb.0:1488; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm11489; AVX1-NEXT:    vcmptrueps %ymm1, %ymm1, %ymm11490; AVX1-NEXT:    vptest %ymm1, %ymm01491; AVX1-NEXT:    setb %al1492; AVX1-NEXT:    vzeroupper1493; AVX1-NEXT:    retq1494;1495; AVX2-LABEL: icmp1_v16i16_v16i1:1496; AVX2:       # %bb.0:1497; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm11498; AVX2-NEXT:    vptest %ymm1, %ymm01499; AVX2-NEXT:    setb %al1500; AVX2-NEXT:    vzeroupper1501; AVX2-NEXT:    retq1502;1503; AVX512-LABEL: icmp1_v16i16_v16i1:1504; AVX512:       # %bb.0:1505; AVX512-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm11506; AVX512-NEXT:    vptest %ymm1, %ymm01507; AVX512-NEXT:    setb %al1508; AVX512-NEXT:    vzeroupper1509; AVX512-NEXT:    retq1510  %a = icmp eq <16 x i16> %0, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>1511  %b = call i1 @llvm.vector.reduce.and.v16i1(<16 x i1> %a)1512  ret i1 %b1513}1514 1515define i1 @icmp1_v32i8_v32i1(<32 x i8>) nounwind {1516; SSE2-LABEL: icmp1_v32i8_v32i1:1517; SSE2:       # %bb.0:1518; SSE2-NEXT:    pand %xmm1, %xmm01519; SSE2-NEXT:    pcmpeqd %xmm1, %xmm11520; SSE2-NEXT:    pcmpeqb %xmm0, %xmm11521; SSE2-NEXT:    pmovmskb %xmm1, %eax1522; SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF1523; SSE2-NEXT:    sete %al1524; SSE2-NEXT:    ret{{[l|q]}}1525;1526; SSE41-LABEL: icmp1_v32i8_v32i1:1527; SSE41:       # %bb.0:1528; SSE41-NEXT:    pand %xmm1, %xmm01529; SSE41-NEXT:    pcmpeqd %xmm1, %xmm11530; SSE41-NEXT:    ptest %xmm1, %xmm01531; SSE41-NEXT:    setb %al1532; SSE41-NEXT:    retq1533;1534; AVX1-LABEL: icmp1_v32i8_v32i1:1535; AVX1:       # %bb.0:1536; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm11537; AVX1-NEXT:    vcmptrueps %ymm1, %ymm1, %ymm11538; AVX1-NEXT:    vptest %ymm1, %ymm01539; AVX1-NEXT:    setb %al1540; AVX1-NEXT:    vzeroupper1541; AVX1-NEXT:    retq1542;1543; AVX2-LABEL: icmp1_v32i8_v32i1:1544; AVX2:       # %bb.0:1545; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm11546; AVX2-NEXT:    vptest %ymm1, %ymm01547; AVX2-NEXT:    setb %al1548; AVX2-NEXT:    vzeroupper1549; AVX2-NEXT:    retq1550;1551; AVX512-LABEL: icmp1_v32i8_v32i1:1552; AVX512:       # %bb.0:1553; AVX512-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm11554; AVX512-NEXT:    vptest %ymm1, %ymm01555; AVX512-NEXT:    setb %al1556; AVX512-NEXT:    vzeroupper1557; AVX512-NEXT:    retq1558  %a = icmp eq <32 x i8> %0, <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, 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>1559  %b = call i1 @llvm.vector.reduce.and.v32i1(<32 x i1> %a)1560  ret i1 %b1561}1562 1563define i1 @icmp1_v8i64_v8i1(<8 x i64>) nounwind {1564; X86-SSE2-LABEL: icmp1_v8i64_v8i1:1565; X86-SSE2:       # %bb.0:1566; X86-SSE2-NEXT:    pushl %ebp1567; X86-SSE2-NEXT:    movl %esp, %ebp1568; X86-SSE2-NEXT:    andl $-16, %esp1569; X86-SSE2-NEXT:    subl $16, %esp1570; X86-SSE2-NEXT:    pand %xmm2, %xmm01571; X86-SSE2-NEXT:    pand 8(%ebp), %xmm11572; X86-SSE2-NEXT:    pand %xmm0, %xmm11573; X86-SSE2-NEXT:    pcmpeqd %xmm0, %xmm01574; X86-SSE2-NEXT:    pcmpeqd %xmm1, %xmm01575; X86-SSE2-NEXT:    movmskps %xmm0, %eax1576; X86-SSE2-NEXT:    xorl $15, %eax1577; X86-SSE2-NEXT:    sete %al1578; X86-SSE2-NEXT:    movl %ebp, %esp1579; X86-SSE2-NEXT:    popl %ebp1580; X86-SSE2-NEXT:    retl1581;1582; X64-SSE2-LABEL: icmp1_v8i64_v8i1:1583; X64-SSE2:       # %bb.0:1584; X64-SSE2-NEXT:    pand %xmm3, %xmm11585; X64-SSE2-NEXT:    pand %xmm2, %xmm01586; X64-SSE2-NEXT:    pand %xmm1, %xmm01587; X64-SSE2-NEXT:    pcmpeqd %xmm1, %xmm11588; X64-SSE2-NEXT:    pcmpeqd %xmm0, %xmm11589; X64-SSE2-NEXT:    movmskps %xmm1, %eax1590; X64-SSE2-NEXT:    xorl $15, %eax1591; X64-SSE2-NEXT:    sete %al1592; X64-SSE2-NEXT:    retq1593;1594; SSE41-LABEL: icmp1_v8i64_v8i1:1595; SSE41:       # %bb.0:1596; SSE41-NEXT:    pand %xmm3, %xmm11597; SSE41-NEXT:    pand %xmm2, %xmm01598; SSE41-NEXT:    pand %xmm1, %xmm01599; SSE41-NEXT:    pcmpeqd %xmm1, %xmm11600; SSE41-NEXT:    ptest %xmm1, %xmm01601; SSE41-NEXT:    setb %al1602; SSE41-NEXT:    retq1603;1604; AVX1-LABEL: icmp1_v8i64_v8i1:1605; AVX1:       # %bb.0:1606; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm01607; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm11608; AVX1-NEXT:    vcmptrueps %ymm1, %ymm1, %ymm11609; AVX1-NEXT:    vptest %ymm1, %ymm01610; AVX1-NEXT:    setb %al1611; AVX1-NEXT:    vzeroupper1612; AVX1-NEXT:    retq1613;1614; AVX2-LABEL: icmp1_v8i64_v8i1:1615; AVX2:       # %bb.0:1616; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm01617; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm11618; AVX2-NEXT:    vptest %ymm1, %ymm01619; AVX2-NEXT:    setb %al1620; AVX2-NEXT:    vzeroupper1621; AVX2-NEXT:    retq1622;1623; AVX512-LABEL: icmp1_v8i64_v8i1:1624; AVX512:       # %bb.0:1625; AVX512-NEXT:    vpternlogd {{.*#+}} zmm1 = -11626; AVX512-NEXT:    vpcmpneqd %zmm1, %zmm0, %k01627; AVX512-NEXT:    kortestw %k0, %k01628; AVX512-NEXT:    sete %al1629; AVX512-NEXT:    vzeroupper1630; AVX512-NEXT:    retq1631  %a = icmp eq <8 x i64> %0, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>1632  %b = call i1 @llvm.vector.reduce.and.v8i1(<8 x i1> %a)1633  ret i1 %b1634}1635 1636define i1 @icmp1_v16i32_v16i1(<16 x i32>) nounwind {1637; X86-SSE2-LABEL: icmp1_v16i32_v16i1:1638; X86-SSE2:       # %bb.0:1639; X86-SSE2-NEXT:    pushl %ebp1640; X86-SSE2-NEXT:    movl %esp, %ebp1641; X86-SSE2-NEXT:    andl $-16, %esp1642; X86-SSE2-NEXT:    subl $16, %esp1643; X86-SSE2-NEXT:    pand %xmm2, %xmm01644; X86-SSE2-NEXT:    pand 8(%ebp), %xmm11645; X86-SSE2-NEXT:    pand %xmm0, %xmm11646; X86-SSE2-NEXT:    pcmpeqd %xmm0, %xmm01647; X86-SSE2-NEXT:    pcmpeqd %xmm1, %xmm01648; X86-SSE2-NEXT:    movmskps %xmm0, %eax1649; X86-SSE2-NEXT:    xorl $15, %eax1650; X86-SSE2-NEXT:    sete %al1651; X86-SSE2-NEXT:    movl %ebp, %esp1652; X86-SSE2-NEXT:    popl %ebp1653; X86-SSE2-NEXT:    retl1654;1655; X64-SSE2-LABEL: icmp1_v16i32_v16i1:1656; X64-SSE2:       # %bb.0:1657; X64-SSE2-NEXT:    pand %xmm3, %xmm11658; X64-SSE2-NEXT:    pand %xmm2, %xmm01659; X64-SSE2-NEXT:    pand %xmm1, %xmm01660; X64-SSE2-NEXT:    pcmpeqd %xmm1, %xmm11661; X64-SSE2-NEXT:    pcmpeqd %xmm0, %xmm11662; X64-SSE2-NEXT:    movmskps %xmm1, %eax1663; X64-SSE2-NEXT:    xorl $15, %eax1664; X64-SSE2-NEXT:    sete %al1665; X64-SSE2-NEXT:    retq1666;1667; SSE41-LABEL: icmp1_v16i32_v16i1:1668; SSE41:       # %bb.0:1669; SSE41-NEXT:    pand %xmm3, %xmm11670; SSE41-NEXT:    pand %xmm2, %xmm01671; SSE41-NEXT:    pand %xmm1, %xmm01672; SSE41-NEXT:    pcmpeqd %xmm1, %xmm11673; SSE41-NEXT:    ptest %xmm1, %xmm01674; SSE41-NEXT:    setb %al1675; SSE41-NEXT:    retq1676;1677; AVX1-LABEL: icmp1_v16i32_v16i1:1678; AVX1:       # %bb.0:1679; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm01680; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm11681; AVX1-NEXT:    vcmptrueps %ymm1, %ymm1, %ymm11682; AVX1-NEXT:    vptest %ymm1, %ymm01683; AVX1-NEXT:    setb %al1684; AVX1-NEXT:    vzeroupper1685; AVX1-NEXT:    retq1686;1687; AVX2-LABEL: icmp1_v16i32_v16i1:1688; AVX2:       # %bb.0:1689; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm01690; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm11691; AVX2-NEXT:    vptest %ymm1, %ymm01692; AVX2-NEXT:    setb %al1693; AVX2-NEXT:    vzeroupper1694; AVX2-NEXT:    retq1695;1696; AVX512-LABEL: icmp1_v16i32_v16i1:1697; AVX512:       # %bb.0:1698; AVX512-NEXT:    vpternlogd {{.*#+}} zmm1 = -11699; AVX512-NEXT:    vpcmpneqd %zmm1, %zmm0, %k01700; AVX512-NEXT:    kortestw %k0, %k01701; AVX512-NEXT:    sete %al1702; AVX512-NEXT:    vzeroupper1703; AVX512-NEXT:    retq1704  %a = icmp eq <16 x i32> %0, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>1705  %b = call i1 @llvm.vector.reduce.and.v16i1(<16 x i1> %a)1706  ret i1 %b1707}1708 1709define i1 @icmp1_v32i16_v32i1(<32 x i16>) nounwind {1710; X86-SSE2-LABEL: icmp1_v32i16_v32i1:1711; X86-SSE2:       # %bb.0:1712; X86-SSE2-NEXT:    pushl %ebp1713; X86-SSE2-NEXT:    movl %esp, %ebp1714; X86-SSE2-NEXT:    andl $-16, %esp1715; X86-SSE2-NEXT:    subl $16, %esp1716; X86-SSE2-NEXT:    pand %xmm2, %xmm01717; X86-SSE2-NEXT:    pand 8(%ebp), %xmm11718; X86-SSE2-NEXT:    pand %xmm0, %xmm11719; X86-SSE2-NEXT:    pcmpeqd %xmm0, %xmm01720; X86-SSE2-NEXT:    pcmpeqb %xmm1, %xmm01721; X86-SSE2-NEXT:    pmovmskb %xmm0, %eax1722; X86-SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF1723; X86-SSE2-NEXT:    sete %al1724; X86-SSE2-NEXT:    movl %ebp, %esp1725; X86-SSE2-NEXT:    popl %ebp1726; X86-SSE2-NEXT:    retl1727;1728; X64-SSE2-LABEL: icmp1_v32i16_v32i1:1729; X64-SSE2:       # %bb.0:1730; X64-SSE2-NEXT:    pand %xmm3, %xmm11731; X64-SSE2-NEXT:    pand %xmm2, %xmm01732; X64-SSE2-NEXT:    pand %xmm1, %xmm01733; X64-SSE2-NEXT:    pcmpeqd %xmm1, %xmm11734; X64-SSE2-NEXT:    pcmpeqb %xmm0, %xmm11735; X64-SSE2-NEXT:    pmovmskb %xmm1, %eax1736; X64-SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF1737; X64-SSE2-NEXT:    sete %al1738; X64-SSE2-NEXT:    retq1739;1740; SSE41-LABEL: icmp1_v32i16_v32i1:1741; SSE41:       # %bb.0:1742; SSE41-NEXT:    pand %xmm3, %xmm11743; SSE41-NEXT:    pand %xmm2, %xmm01744; SSE41-NEXT:    pand %xmm1, %xmm01745; SSE41-NEXT:    pcmpeqd %xmm1, %xmm11746; SSE41-NEXT:    ptest %xmm1, %xmm01747; SSE41-NEXT:    setb %al1748; SSE41-NEXT:    retq1749;1750; AVX1-LABEL: icmp1_v32i16_v32i1:1751; AVX1:       # %bb.0:1752; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm01753; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm11754; AVX1-NEXT:    vcmptrueps %ymm1, %ymm1, %ymm11755; AVX1-NEXT:    vptest %ymm1, %ymm01756; AVX1-NEXT:    setb %al1757; AVX1-NEXT:    vzeroupper1758; AVX1-NEXT:    retq1759;1760; AVX2-LABEL: icmp1_v32i16_v32i1:1761; AVX2:       # %bb.0:1762; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm01763; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm11764; AVX2-NEXT:    vptest %ymm1, %ymm01765; AVX2-NEXT:    setb %al1766; AVX2-NEXT:    vzeroupper1767; AVX2-NEXT:    retq1768;1769; AVX512-LABEL: icmp1_v32i16_v32i1:1770; AVX512:       # %bb.0:1771; AVX512-NEXT:    vpternlogd {{.*#+}} zmm1 = -11772; AVX512-NEXT:    vpcmpneqd %zmm1, %zmm0, %k01773; AVX512-NEXT:    kortestw %k0, %k01774; AVX512-NEXT:    sete %al1775; AVX512-NEXT:    vzeroupper1776; AVX512-NEXT:    retq1777  %a = icmp eq <32 x i16> %0, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>1778  %b = call i1 @llvm.vector.reduce.and.v32i1(<32 x i1> %a)1779  ret i1 %b1780}1781 1782define i1 @icmp1_v64i8_v64i1(<64 x i8>) nounwind {1783; X86-SSE2-LABEL: icmp1_v64i8_v64i1:1784; X86-SSE2:       # %bb.0:1785; X86-SSE2-NEXT:    pushl %ebp1786; X86-SSE2-NEXT:    movl %esp, %ebp1787; X86-SSE2-NEXT:    andl $-16, %esp1788; X86-SSE2-NEXT:    subl $16, %esp1789; X86-SSE2-NEXT:    pand %xmm2, %xmm01790; X86-SSE2-NEXT:    pand 8(%ebp), %xmm11791; X86-SSE2-NEXT:    pand %xmm0, %xmm11792; X86-SSE2-NEXT:    pcmpeqd %xmm0, %xmm01793; X86-SSE2-NEXT:    pcmpeqb %xmm1, %xmm01794; X86-SSE2-NEXT:    pmovmskb %xmm0, %eax1795; X86-SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF1796; X86-SSE2-NEXT:    sete %al1797; X86-SSE2-NEXT:    movl %ebp, %esp1798; X86-SSE2-NEXT:    popl %ebp1799; X86-SSE2-NEXT:    retl1800;1801; X64-SSE2-LABEL: icmp1_v64i8_v64i1:1802; X64-SSE2:       # %bb.0:1803; X64-SSE2-NEXT:    pand %xmm3, %xmm11804; X64-SSE2-NEXT:    pand %xmm2, %xmm01805; X64-SSE2-NEXT:    pand %xmm1, %xmm01806; X64-SSE2-NEXT:    pcmpeqd %xmm1, %xmm11807; X64-SSE2-NEXT:    pcmpeqb %xmm0, %xmm11808; X64-SSE2-NEXT:    pmovmskb %xmm1, %eax1809; X64-SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF1810; X64-SSE2-NEXT:    sete %al1811; X64-SSE2-NEXT:    retq1812;1813; SSE41-LABEL: icmp1_v64i8_v64i1:1814; SSE41:       # %bb.0:1815; SSE41-NEXT:    pand %xmm3, %xmm11816; SSE41-NEXT:    pand %xmm2, %xmm01817; SSE41-NEXT:    pand %xmm1, %xmm01818; SSE41-NEXT:    pcmpeqd %xmm1, %xmm11819; SSE41-NEXT:    ptest %xmm1, %xmm01820; SSE41-NEXT:    setb %al1821; SSE41-NEXT:    retq1822;1823; AVX1-LABEL: icmp1_v64i8_v64i1:1824; AVX1:       # %bb.0:1825; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm01826; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm11827; AVX1-NEXT:    vcmptrueps %ymm1, %ymm1, %ymm11828; AVX1-NEXT:    vptest %ymm1, %ymm01829; AVX1-NEXT:    setb %al1830; AVX1-NEXT:    vzeroupper1831; AVX1-NEXT:    retq1832;1833; AVX2-LABEL: icmp1_v64i8_v64i1:1834; AVX2:       # %bb.0:1835; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm01836; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm11837; AVX2-NEXT:    vptest %ymm1, %ymm01838; AVX2-NEXT:    setb %al1839; AVX2-NEXT:    vzeroupper1840; AVX2-NEXT:    retq1841;1842; AVX512-LABEL: icmp1_v64i8_v64i1:1843; AVX512:       # %bb.0:1844; AVX512-NEXT:    vpternlogd {{.*#+}} zmm1 = -11845; AVX512-NEXT:    vpcmpneqd %zmm1, %zmm0, %k01846; AVX512-NEXT:    kortestw %k0, %k01847; AVX512-NEXT:    sete %al1848; AVX512-NEXT:    vzeroupper1849; AVX512-NEXT:    retq1850  %a = icmp eq <64 x i8> %0, <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, 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, 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, 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>1851  %b = call i1 @llvm.vector.reduce.and.v64i1(<64 x i1> %a)1852  ret i1 %b1853}1854 1855define i8 @icmp1_v8i1(<8 x i8>) nounwind {1856; SSE2-LABEL: icmp1_v8i1:1857; SSE2:       # %bb.0:1858; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1859; SSE2-NEXT:    psllw $15, %xmm01860; SSE2-NEXT:    packsswb %xmm0, %xmm01861; SSE2-NEXT:    pmovmskb %xmm0, %eax1862; SSE2-NEXT:    cmpb $-1, %al1863; SSE2-NEXT:    sete %al1864; SSE2-NEXT:    ret{{[l|q]}}1865;1866; SSE41-LABEL: icmp1_v8i1:1867; SSE41:       # %bb.0:1868; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero1869; SSE41-NEXT:    psllw $15, %xmm01870; SSE41-NEXT:    packsswb %xmm0, %xmm01871; SSE41-NEXT:    pmovmskb %xmm0, %eax1872; SSE41-NEXT:    cmpb $-1, %al1873; SSE41-NEXT:    sete %al1874; SSE41-NEXT:    retq1875;1876; AVX1OR2-LABEL: icmp1_v8i1:1877; AVX1OR2:       # %bb.0:1878; AVX1OR2-NEXT:    vpmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero1879; AVX1OR2-NEXT:    vpsllw $15, %xmm0, %xmm01880; AVX1OR2-NEXT:    vpacksswb %xmm0, %xmm0, %xmm01881; AVX1OR2-NEXT:    vpmovmskb %xmm0, %eax1882; AVX1OR2-NEXT:    cmpb $-1, %al1883; AVX1OR2-NEXT:    sete %al1884; AVX1OR2-NEXT:    retq1885;1886; AVX512F-LABEL: icmp1_v8i1:1887; AVX512F:       # %bb.0:1888; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm01889; AVX512F-NEXT:    vpslld $31, %zmm0, %zmm01890; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k01891; AVX512F-NEXT:    kmovw %k0, %eax1892; AVX512F-NEXT:    cmpb $-1, %al1893; AVX512F-NEXT:    sete %al1894; AVX512F-NEXT:    vzeroupper1895; AVX512F-NEXT:    retq1896;1897; AVX512BW-LABEL: icmp1_v8i1:1898; AVX512BW:       # %bb.0:1899; AVX512BW-NEXT:    vpsllw $7, %xmm0, %xmm01900; AVX512BW-NEXT:    vpmovb2m %zmm0, %k01901; AVX512BW-NEXT:    kmovd %k0, %eax1902; AVX512BW-NEXT:    cmpb $-1, %al1903; AVX512BW-NEXT:    sete %al1904; AVX512BW-NEXT:    vzeroupper1905; AVX512BW-NEXT:    retq1906;1907; AVX512VL-LABEL: icmp1_v8i1:1908; AVX512VL:       # %bb.0:1909; AVX512VL-NEXT:    vpsllw $7, %xmm0, %xmm01910; AVX512VL-NEXT:    vpmovb2m %xmm0, %k01911; AVX512VL-NEXT:    kmovd %k0, %eax1912; AVX512VL-NEXT:    cmpb $-1, %al1913; AVX512VL-NEXT:    sete %al1914; AVX512VL-NEXT:    retq1915  %a = trunc <8 x i8> %0 to <8 x i1>1916  %b = icmp eq <8 x i1> %a, <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1>1917  %c = call i1 @llvm.vector.reduce.and.v8i1(<8 x i1> %b)1918  %d = zext i1 %c to i81919  ret i8 %d1920}1921 1922;1923; Comparison1924;1925 1926define i1 @icmp_v2i64_v2i1(<2 x i64>, <2 x i64>) nounwind {1927; SSE2-LABEL: icmp_v2i64_v2i1:1928; SSE2:       # %bb.0:1929; SSE2-NEXT:    pcmpeqd %xmm1, %xmm01930; SSE2-NEXT:    movmskps %xmm0, %eax1931; SSE2-NEXT:    xorl $15, %eax1932; SSE2-NEXT:    sete %al1933; SSE2-NEXT:    ret{{[l|q]}}1934;1935; SSE41-LABEL: icmp_v2i64_v2i1:1936; SSE41:       # %bb.0:1937; SSE41-NEXT:    pxor %xmm1, %xmm01938; SSE41-NEXT:    ptest %xmm0, %xmm01939; SSE41-NEXT:    sete %al1940; SSE41-NEXT:    retq1941;1942; AVX-LABEL: icmp_v2i64_v2i1:1943; AVX:       # %bb.0:1944; AVX-NEXT:    vpxor %xmm1, %xmm0, %xmm01945; AVX-NEXT:    vptest %xmm0, %xmm01946; AVX-NEXT:    sete %al1947; AVX-NEXT:    retq1948  %a = icmp eq <2 x i64> %0, %11949  %b = call i1 @llvm.vector.reduce.and.v2i1(<2 x i1> %a)1950  ret i1 %b1951}1952 1953define i1 @icmp_v4i32_v4i1(<4 x i32>, <4 x i32>) nounwind {1954; SSE2-LABEL: icmp_v4i32_v4i1:1955; SSE2:       # %bb.0:1956; SSE2-NEXT:    pcmpeqd %xmm1, %xmm01957; SSE2-NEXT:    movmskps %xmm0, %eax1958; SSE2-NEXT:    xorl $15, %eax1959; SSE2-NEXT:    sete %al1960; SSE2-NEXT:    ret{{[l|q]}}1961;1962; SSE41-LABEL: icmp_v4i32_v4i1:1963; SSE41:       # %bb.0:1964; SSE41-NEXT:    pxor %xmm1, %xmm01965; SSE41-NEXT:    ptest %xmm0, %xmm01966; SSE41-NEXT:    sete %al1967; SSE41-NEXT:    retq1968;1969; AVX-LABEL: icmp_v4i32_v4i1:1970; AVX:       # %bb.0:1971; AVX-NEXT:    vpxor %xmm1, %xmm0, %xmm01972; AVX-NEXT:    vptest %xmm0, %xmm01973; AVX-NEXT:    sete %al1974; AVX-NEXT:    retq1975  %a = icmp eq <4 x i32> %0, %11976  %b = call i1 @llvm.vector.reduce.and.v4i1(<4 x i1> %a)1977  ret i1 %b1978}1979 1980define i1 @icmp_v8i16_v8i1(<8 x i16>, <8 x i16>) nounwind {1981; SSE2-LABEL: icmp_v8i16_v8i1:1982; SSE2:       # %bb.0:1983; SSE2-NEXT:    pcmpeqb %xmm1, %xmm01984; SSE2-NEXT:    pmovmskb %xmm0, %eax1985; SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF1986; SSE2-NEXT:    sete %al1987; SSE2-NEXT:    ret{{[l|q]}}1988;1989; SSE41-LABEL: icmp_v8i16_v8i1:1990; SSE41:       # %bb.0:1991; SSE41-NEXT:    pxor %xmm1, %xmm01992; SSE41-NEXT:    ptest %xmm0, %xmm01993; SSE41-NEXT:    sete %al1994; SSE41-NEXT:    retq1995;1996; AVX-LABEL: icmp_v8i16_v8i1:1997; AVX:       # %bb.0:1998; AVX-NEXT:    vpxor %xmm1, %xmm0, %xmm01999; AVX-NEXT:    vptest %xmm0, %xmm02000; AVX-NEXT:    sete %al2001; AVX-NEXT:    retq2002  %a = icmp eq <8 x i16> %0, %12003  %b = call i1 @llvm.vector.reduce.and.v8i1(<8 x i1> %a)2004  ret i1 %b2005}2006 2007define i1 @icmp_v16i8_v16i1(<16 x i8>, <16 x i8>) nounwind {2008; SSE2-LABEL: icmp_v16i8_v16i1:2009; SSE2:       # %bb.0:2010; SSE2-NEXT:    pcmpeqb %xmm1, %xmm02011; SSE2-NEXT:    pmovmskb %xmm0, %eax2012; SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF2013; SSE2-NEXT:    sete %al2014; SSE2-NEXT:    ret{{[l|q]}}2015;2016; SSE41-LABEL: icmp_v16i8_v16i1:2017; SSE41:       # %bb.0:2018; SSE41-NEXT:    pxor %xmm1, %xmm02019; SSE41-NEXT:    ptest %xmm0, %xmm02020; SSE41-NEXT:    sete %al2021; SSE41-NEXT:    retq2022;2023; AVX-LABEL: icmp_v16i8_v16i1:2024; AVX:       # %bb.0:2025; AVX-NEXT:    vpxor %xmm1, %xmm0, %xmm02026; AVX-NEXT:    vptest %xmm0, %xmm02027; AVX-NEXT:    sete %al2028; AVX-NEXT:    retq2029  %a = icmp eq <16 x i8> %0, %12030  %b = call i1 @llvm.vector.reduce.and.v16i1(<16 x i1> %a)2031  ret i1 %b2032}2033 2034define i1 @icmp_v4i64_v4i1(<4 x i64>, <4 x i64>) nounwind {2035; X86-SSE2-LABEL: icmp_v4i64_v4i1:2036; X86-SSE2:       # %bb.0:2037; X86-SSE2-NEXT:    pushl %ebp2038; X86-SSE2-NEXT:    movl %esp, %ebp2039; X86-SSE2-NEXT:    andl $-16, %esp2040; X86-SSE2-NEXT:    subl $16, %esp2041; X86-SSE2-NEXT:    pcmpeqd %xmm2, %xmm02042; X86-SSE2-NEXT:    pcmpeqd 8(%ebp), %xmm12043; X86-SSE2-NEXT:    pand %xmm0, %xmm12044; X86-SSE2-NEXT:    movmskps %xmm1, %eax2045; X86-SSE2-NEXT:    xorl $15, %eax2046; X86-SSE2-NEXT:    sete %al2047; X86-SSE2-NEXT:    movl %ebp, %esp2048; X86-SSE2-NEXT:    popl %ebp2049; X86-SSE2-NEXT:    retl2050;2051; X64-SSE2-LABEL: icmp_v4i64_v4i1:2052; X64-SSE2:       # %bb.0:2053; X64-SSE2-NEXT:    pcmpeqd %xmm3, %xmm12054; X64-SSE2-NEXT:    pcmpeqd %xmm2, %xmm02055; X64-SSE2-NEXT:    pand %xmm1, %xmm02056; X64-SSE2-NEXT:    movmskps %xmm0, %eax2057; X64-SSE2-NEXT:    xorl $15, %eax2058; X64-SSE2-NEXT:    sete %al2059; X64-SSE2-NEXT:    retq2060;2061; SSE41-LABEL: icmp_v4i64_v4i1:2062; SSE41:       # %bb.0:2063; SSE41-NEXT:    pxor %xmm3, %xmm12064; SSE41-NEXT:    pxor %xmm2, %xmm02065; SSE41-NEXT:    por %xmm1, %xmm02066; SSE41-NEXT:    ptest %xmm0, %xmm02067; SSE41-NEXT:    sete %al2068; SSE41-NEXT:    retq2069;2070; AVX1-LABEL: icmp_v4i64_v4i1:2071; AVX1:       # %bb.0:2072; AVX1-NEXT:    vxorps %ymm1, %ymm0, %ymm02073; AVX1-NEXT:    vptest %ymm0, %ymm02074; AVX1-NEXT:    sete %al2075; AVX1-NEXT:    vzeroupper2076; AVX1-NEXT:    retq2077;2078; AVX2-LABEL: icmp_v4i64_v4i1:2079; AVX2:       # %bb.0:2080; AVX2-NEXT:    vpxor %ymm1, %ymm0, %ymm02081; AVX2-NEXT:    vptest %ymm0, %ymm02082; AVX2-NEXT:    sete %al2083; AVX2-NEXT:    vzeroupper2084; AVX2-NEXT:    retq2085;2086; AVX512-LABEL: icmp_v4i64_v4i1:2087; AVX512:       # %bb.0:2088; AVX512-NEXT:    vpxor %ymm1, %ymm0, %ymm02089; AVX512-NEXT:    vptest %ymm0, %ymm02090; AVX512-NEXT:    sete %al2091; AVX512-NEXT:    vzeroupper2092; AVX512-NEXT:    retq2093  %a = icmp eq <4 x i64> %0, %12094  %b = call i1 @llvm.vector.reduce.and.v4i1(<4 x i1> %a)2095  ret i1 %b2096}2097 2098define i1 @icmp_v8i32_v8i1(<8 x i32>, <8 x i32>) nounwind {2099; X86-SSE2-LABEL: icmp_v8i32_v8i1:2100; X86-SSE2:       # %bb.0:2101; X86-SSE2-NEXT:    pushl %ebp2102; X86-SSE2-NEXT:    movl %esp, %ebp2103; X86-SSE2-NEXT:    andl $-16, %esp2104; X86-SSE2-NEXT:    subl $16, %esp2105; X86-SSE2-NEXT:    pcmpeqd %xmm2, %xmm02106; X86-SSE2-NEXT:    pcmpeqd 8(%ebp), %xmm12107; X86-SSE2-NEXT:    pand %xmm0, %xmm12108; X86-SSE2-NEXT:    movmskps %xmm1, %eax2109; X86-SSE2-NEXT:    xorl $15, %eax2110; X86-SSE2-NEXT:    sete %al2111; X86-SSE2-NEXT:    movl %ebp, %esp2112; X86-SSE2-NEXT:    popl %ebp2113; X86-SSE2-NEXT:    retl2114;2115; X64-SSE2-LABEL: icmp_v8i32_v8i1:2116; X64-SSE2:       # %bb.0:2117; X64-SSE2-NEXT:    pcmpeqd %xmm3, %xmm12118; X64-SSE2-NEXT:    pcmpeqd %xmm2, %xmm02119; X64-SSE2-NEXT:    pand %xmm1, %xmm02120; X64-SSE2-NEXT:    movmskps %xmm0, %eax2121; X64-SSE2-NEXT:    xorl $15, %eax2122; X64-SSE2-NEXT:    sete %al2123; X64-SSE2-NEXT:    retq2124;2125; SSE41-LABEL: icmp_v8i32_v8i1:2126; SSE41:       # %bb.0:2127; SSE41-NEXT:    pxor %xmm3, %xmm12128; SSE41-NEXT:    pxor %xmm2, %xmm02129; SSE41-NEXT:    por %xmm1, %xmm02130; SSE41-NEXT:    ptest %xmm0, %xmm02131; SSE41-NEXT:    sete %al2132; SSE41-NEXT:    retq2133;2134; AVX1-LABEL: icmp_v8i32_v8i1:2135; AVX1:       # %bb.0:2136; AVX1-NEXT:    vxorps %ymm1, %ymm0, %ymm02137; AVX1-NEXT:    vptest %ymm0, %ymm02138; AVX1-NEXT:    sete %al2139; AVX1-NEXT:    vzeroupper2140; AVX1-NEXT:    retq2141;2142; AVX2-LABEL: icmp_v8i32_v8i1:2143; AVX2:       # %bb.0:2144; AVX2-NEXT:    vpxor %ymm1, %ymm0, %ymm02145; AVX2-NEXT:    vptest %ymm0, %ymm02146; AVX2-NEXT:    sete %al2147; AVX2-NEXT:    vzeroupper2148; AVX2-NEXT:    retq2149;2150; AVX512-LABEL: icmp_v8i32_v8i1:2151; AVX512:       # %bb.0:2152; AVX512-NEXT:    vpxor %ymm1, %ymm0, %ymm02153; AVX512-NEXT:    vptest %ymm0, %ymm02154; AVX512-NEXT:    sete %al2155; AVX512-NEXT:    vzeroupper2156; AVX512-NEXT:    retq2157  %a = icmp eq <8 x i32> %0, %12158  %b = call i1 @llvm.vector.reduce.and.v8i1(<8 x i1> %a)2159  ret i1 %b2160}2161 2162define i1 @icmp_v16i16_v16i1(<16 x i16>, <16 x i16>) nounwind {2163; X86-SSE2-LABEL: icmp_v16i16_v16i1:2164; X86-SSE2:       # %bb.0:2165; X86-SSE2-NEXT:    pushl %ebp2166; X86-SSE2-NEXT:    movl %esp, %ebp2167; X86-SSE2-NEXT:    andl $-16, %esp2168; X86-SSE2-NEXT:    subl $16, %esp2169; X86-SSE2-NEXT:    pcmpeqb %xmm2, %xmm02170; X86-SSE2-NEXT:    pcmpeqb 8(%ebp), %xmm12171; X86-SSE2-NEXT:    pand %xmm0, %xmm12172; X86-SSE2-NEXT:    pmovmskb %xmm1, %eax2173; X86-SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF2174; X86-SSE2-NEXT:    sete %al2175; X86-SSE2-NEXT:    movl %ebp, %esp2176; X86-SSE2-NEXT:    popl %ebp2177; X86-SSE2-NEXT:    retl2178;2179; X64-SSE2-LABEL: icmp_v16i16_v16i1:2180; X64-SSE2:       # %bb.0:2181; X64-SSE2-NEXT:    pcmpeqb %xmm3, %xmm12182; X64-SSE2-NEXT:    pcmpeqb %xmm2, %xmm02183; X64-SSE2-NEXT:    pand %xmm1, %xmm02184; X64-SSE2-NEXT:    pmovmskb %xmm0, %eax2185; X64-SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF2186; X64-SSE2-NEXT:    sete %al2187; X64-SSE2-NEXT:    retq2188;2189; SSE41-LABEL: icmp_v16i16_v16i1:2190; SSE41:       # %bb.0:2191; SSE41-NEXT:    pxor %xmm3, %xmm12192; SSE41-NEXT:    pxor %xmm2, %xmm02193; SSE41-NEXT:    por %xmm1, %xmm02194; SSE41-NEXT:    ptest %xmm0, %xmm02195; SSE41-NEXT:    sete %al2196; SSE41-NEXT:    retq2197;2198; AVX1-LABEL: icmp_v16i16_v16i1:2199; AVX1:       # %bb.0:2200; AVX1-NEXT:    vxorps %ymm1, %ymm0, %ymm02201; AVX1-NEXT:    vptest %ymm0, %ymm02202; AVX1-NEXT:    sete %al2203; AVX1-NEXT:    vzeroupper2204; AVX1-NEXT:    retq2205;2206; AVX2-LABEL: icmp_v16i16_v16i1:2207; AVX2:       # %bb.0:2208; AVX2-NEXT:    vpxor %ymm1, %ymm0, %ymm02209; AVX2-NEXT:    vptest %ymm0, %ymm02210; AVX2-NEXT:    sete %al2211; AVX2-NEXT:    vzeroupper2212; AVX2-NEXT:    retq2213;2214; AVX512-LABEL: icmp_v16i16_v16i1:2215; AVX512:       # %bb.0:2216; AVX512-NEXT:    vpxor %ymm1, %ymm0, %ymm02217; AVX512-NEXT:    vptest %ymm0, %ymm02218; AVX512-NEXT:    sete %al2219; AVX512-NEXT:    vzeroupper2220; AVX512-NEXT:    retq2221  %a = icmp eq <16 x i16> %0, %12222  %b = call i1 @llvm.vector.reduce.and.v16i1(<16 x i1> %a)2223  ret i1 %b2224}2225 2226define i1 @icmp_v32i8_v32i1(<32 x i8>, <32 x i8>) nounwind {2227; X86-SSE2-LABEL: icmp_v32i8_v32i1:2228; X86-SSE2:       # %bb.0:2229; X86-SSE2-NEXT:    pushl %ebp2230; X86-SSE2-NEXT:    movl %esp, %ebp2231; X86-SSE2-NEXT:    andl $-16, %esp2232; X86-SSE2-NEXT:    subl $16, %esp2233; X86-SSE2-NEXT:    pcmpeqb %xmm2, %xmm02234; X86-SSE2-NEXT:    pcmpeqb 8(%ebp), %xmm12235; X86-SSE2-NEXT:    pand %xmm0, %xmm12236; X86-SSE2-NEXT:    pmovmskb %xmm1, %eax2237; X86-SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF2238; X86-SSE2-NEXT:    sete %al2239; X86-SSE2-NEXT:    movl %ebp, %esp2240; X86-SSE2-NEXT:    popl %ebp2241; X86-SSE2-NEXT:    retl2242;2243; X64-SSE2-LABEL: icmp_v32i8_v32i1:2244; X64-SSE2:       # %bb.0:2245; X64-SSE2-NEXT:    pcmpeqb %xmm3, %xmm12246; X64-SSE2-NEXT:    pcmpeqb %xmm2, %xmm02247; X64-SSE2-NEXT:    pand %xmm1, %xmm02248; X64-SSE2-NEXT:    pmovmskb %xmm0, %eax2249; X64-SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF2250; X64-SSE2-NEXT:    sete %al2251; X64-SSE2-NEXT:    retq2252;2253; SSE41-LABEL: icmp_v32i8_v32i1:2254; SSE41:       # %bb.0:2255; SSE41-NEXT:    pxor %xmm3, %xmm12256; SSE41-NEXT:    pxor %xmm2, %xmm02257; SSE41-NEXT:    por %xmm1, %xmm02258; SSE41-NEXT:    ptest %xmm0, %xmm02259; SSE41-NEXT:    sete %al2260; SSE41-NEXT:    retq2261;2262; AVX1-LABEL: icmp_v32i8_v32i1:2263; AVX1:       # %bb.0:2264; AVX1-NEXT:    vxorps %ymm1, %ymm0, %ymm02265; AVX1-NEXT:    vptest %ymm0, %ymm02266; AVX1-NEXT:    sete %al2267; AVX1-NEXT:    vzeroupper2268; AVX1-NEXT:    retq2269;2270; AVX2-LABEL: icmp_v32i8_v32i1:2271; AVX2:       # %bb.0:2272; AVX2-NEXT:    vpxor %ymm1, %ymm0, %ymm02273; AVX2-NEXT:    vptest %ymm0, %ymm02274; AVX2-NEXT:    sete %al2275; AVX2-NEXT:    vzeroupper2276; AVX2-NEXT:    retq2277;2278; AVX512-LABEL: icmp_v32i8_v32i1:2279; AVX512:       # %bb.0:2280; AVX512-NEXT:    vpxor %ymm1, %ymm0, %ymm02281; AVX512-NEXT:    vptest %ymm0, %ymm02282; AVX512-NEXT:    sete %al2283; AVX512-NEXT:    vzeroupper2284; AVX512-NEXT:    retq2285  %a = icmp eq <32 x i8> %0, %12286  %b = call i1 @llvm.vector.reduce.and.v32i1(<32 x i1> %a)2287  ret i1 %b2288}2289 2290define i1 @icmp_v8i64_v8i1(<8 x i64>, <8 x i64>) nounwind {2291; X86-SSE2-LABEL: icmp_v8i64_v8i1:2292; X86-SSE2:       # %bb.0:2293; X86-SSE2-NEXT:    pushl %ebp2294; X86-SSE2-NEXT:    movl %esp, %ebp2295; X86-SSE2-NEXT:    andl $-16, %esp2296; X86-SSE2-NEXT:    subl $16, %esp2297; X86-SSE2-NEXT:    movdqa 8(%ebp), %xmm32298; X86-SSE2-NEXT:    pcmpeqd 72(%ebp), %xmm32299; X86-SSE2-NEXT:    pcmpeqd 40(%ebp), %xmm12300; X86-SSE2-NEXT:    pand %xmm3, %xmm12301; X86-SSE2-NEXT:    pcmpeqd 56(%ebp), %xmm22302; X86-SSE2-NEXT:    pcmpeqd 24(%ebp), %xmm02303; X86-SSE2-NEXT:    pand %xmm2, %xmm02304; X86-SSE2-NEXT:    pand %xmm1, %xmm02305; X86-SSE2-NEXT:    movmskps %xmm0, %eax2306; X86-SSE2-NEXT:    xorl $15, %eax2307; X86-SSE2-NEXT:    sete %al2308; X86-SSE2-NEXT:    movl %ebp, %esp2309; X86-SSE2-NEXT:    popl %ebp2310; X86-SSE2-NEXT:    retl2311;2312; X64-SSE2-LABEL: icmp_v8i64_v8i1:2313; X64-SSE2:       # %bb.0:2314; X64-SSE2-NEXT:    pcmpeqd %xmm7, %xmm32315; X64-SSE2-NEXT:    pcmpeqd %xmm5, %xmm12316; X64-SSE2-NEXT:    pand %xmm3, %xmm12317; X64-SSE2-NEXT:    pcmpeqd %xmm6, %xmm22318; X64-SSE2-NEXT:    pcmpeqd %xmm4, %xmm02319; X64-SSE2-NEXT:    pand %xmm2, %xmm02320; X64-SSE2-NEXT:    pand %xmm1, %xmm02321; X64-SSE2-NEXT:    movmskps %xmm0, %eax2322; X64-SSE2-NEXT:    xorl $15, %eax2323; X64-SSE2-NEXT:    sete %al2324; X64-SSE2-NEXT:    retq2325;2326; SSE41-LABEL: icmp_v8i64_v8i1:2327; SSE41:       # %bb.0:2328; SSE41-NEXT:    pxor %xmm7, %xmm32329; SSE41-NEXT:    pxor %xmm5, %xmm12330; SSE41-NEXT:    por %xmm3, %xmm12331; SSE41-NEXT:    pxor %xmm6, %xmm22332; SSE41-NEXT:    pxor %xmm4, %xmm02333; SSE41-NEXT:    por %xmm2, %xmm02334; SSE41-NEXT:    por %xmm1, %xmm02335; SSE41-NEXT:    ptest %xmm0, %xmm02336; SSE41-NEXT:    sete %al2337; SSE41-NEXT:    retq2338;2339; AVX1-LABEL: icmp_v8i64_v8i1:2340; AVX1:       # %bb.0:2341; AVX1-NEXT:    vxorps %ymm3, %ymm1, %ymm12342; AVX1-NEXT:    vxorps %ymm2, %ymm0, %ymm02343; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm02344; AVX1-NEXT:    vptest %ymm0, %ymm02345; AVX1-NEXT:    sete %al2346; AVX1-NEXT:    vzeroupper2347; AVX1-NEXT:    retq2348;2349; AVX2-LABEL: icmp_v8i64_v8i1:2350; AVX2:       # %bb.0:2351; AVX2-NEXT:    vpxor %ymm3, %ymm1, %ymm12352; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm02353; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm02354; AVX2-NEXT:    vptest %ymm0, %ymm02355; AVX2-NEXT:    sete %al2356; AVX2-NEXT:    vzeroupper2357; AVX2-NEXT:    retq2358;2359; AVX512-LABEL: icmp_v8i64_v8i1:2360; AVX512:       # %bb.0:2361; AVX512-NEXT:    vpcmpneqd %zmm1, %zmm0, %k02362; AVX512-NEXT:    kortestw %k0, %k02363; AVX512-NEXT:    sete %al2364; AVX512-NEXT:    vzeroupper2365; AVX512-NEXT:    retq2366  %a = icmp eq <8 x i64> %0, %12367  %b = call i1 @llvm.vector.reduce.and.v8i1(<8 x i1> %a)2368  ret i1 %b2369}2370 2371define i1 @icmp_v16i32_v16i1(<16 x i32>, <16 x i32>) nounwind {2372; X86-SSE2-LABEL: icmp_v16i32_v16i1:2373; X86-SSE2:       # %bb.0:2374; X86-SSE2-NEXT:    pushl %ebp2375; X86-SSE2-NEXT:    movl %esp, %ebp2376; X86-SSE2-NEXT:    andl $-16, %esp2377; X86-SSE2-NEXT:    subl $16, %esp2378; X86-SSE2-NEXT:    movdqa 8(%ebp), %xmm32379; X86-SSE2-NEXT:    pcmpeqd 72(%ebp), %xmm32380; X86-SSE2-NEXT:    pcmpeqd 40(%ebp), %xmm12381; X86-SSE2-NEXT:    pand %xmm3, %xmm12382; X86-SSE2-NEXT:    pcmpeqd 56(%ebp), %xmm22383; X86-SSE2-NEXT:    pcmpeqd 24(%ebp), %xmm02384; X86-SSE2-NEXT:    pand %xmm2, %xmm02385; X86-SSE2-NEXT:    pand %xmm1, %xmm02386; X86-SSE2-NEXT:    movmskps %xmm0, %eax2387; X86-SSE2-NEXT:    xorl $15, %eax2388; X86-SSE2-NEXT:    sete %al2389; X86-SSE2-NEXT:    movl %ebp, %esp2390; X86-SSE2-NEXT:    popl %ebp2391; X86-SSE2-NEXT:    retl2392;2393; X64-SSE2-LABEL: icmp_v16i32_v16i1:2394; X64-SSE2:       # %bb.0:2395; X64-SSE2-NEXT:    pcmpeqd %xmm7, %xmm32396; X64-SSE2-NEXT:    pcmpeqd %xmm5, %xmm12397; X64-SSE2-NEXT:    pand %xmm3, %xmm12398; X64-SSE2-NEXT:    pcmpeqd %xmm6, %xmm22399; X64-SSE2-NEXT:    pcmpeqd %xmm4, %xmm02400; X64-SSE2-NEXT:    pand %xmm2, %xmm02401; X64-SSE2-NEXT:    pand %xmm1, %xmm02402; X64-SSE2-NEXT:    movmskps %xmm0, %eax2403; X64-SSE2-NEXT:    xorl $15, %eax2404; X64-SSE2-NEXT:    sete %al2405; X64-SSE2-NEXT:    retq2406;2407; SSE41-LABEL: icmp_v16i32_v16i1:2408; SSE41:       # %bb.0:2409; SSE41-NEXT:    pxor %xmm7, %xmm32410; SSE41-NEXT:    pxor %xmm5, %xmm12411; SSE41-NEXT:    por %xmm3, %xmm12412; SSE41-NEXT:    pxor %xmm6, %xmm22413; SSE41-NEXT:    pxor %xmm4, %xmm02414; SSE41-NEXT:    por %xmm2, %xmm02415; SSE41-NEXT:    por %xmm1, %xmm02416; SSE41-NEXT:    ptest %xmm0, %xmm02417; SSE41-NEXT:    sete %al2418; SSE41-NEXT:    retq2419;2420; AVX1-LABEL: icmp_v16i32_v16i1:2421; AVX1:       # %bb.0:2422; AVX1-NEXT:    vxorps %ymm3, %ymm1, %ymm12423; AVX1-NEXT:    vxorps %ymm2, %ymm0, %ymm02424; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm02425; AVX1-NEXT:    vptest %ymm0, %ymm02426; AVX1-NEXT:    sete %al2427; AVX1-NEXT:    vzeroupper2428; AVX1-NEXT:    retq2429;2430; AVX2-LABEL: icmp_v16i32_v16i1:2431; AVX2:       # %bb.0:2432; AVX2-NEXT:    vpxor %ymm3, %ymm1, %ymm12433; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm02434; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm02435; AVX2-NEXT:    vptest %ymm0, %ymm02436; AVX2-NEXT:    sete %al2437; AVX2-NEXT:    vzeroupper2438; AVX2-NEXT:    retq2439;2440; AVX512-LABEL: icmp_v16i32_v16i1:2441; AVX512:       # %bb.0:2442; AVX512-NEXT:    vpcmpneqd %zmm1, %zmm0, %k02443; AVX512-NEXT:    kortestw %k0, %k02444; AVX512-NEXT:    sete %al2445; AVX512-NEXT:    vzeroupper2446; AVX512-NEXT:    retq2447  %a = icmp eq <16 x i32> %0, %12448  %b = call i1 @llvm.vector.reduce.and.v16i1(<16 x i1> %a)2449  ret i1 %b2450}2451 2452define i1 @icmp_v32i16_v32i1(<32 x i16>, <32 x i16>) nounwind {2453; X86-SSE2-LABEL: icmp_v32i16_v32i1:2454; X86-SSE2:       # %bb.0:2455; X86-SSE2-NEXT:    pushl %ebp2456; X86-SSE2-NEXT:    movl %esp, %ebp2457; X86-SSE2-NEXT:    andl $-16, %esp2458; X86-SSE2-NEXT:    subl $16, %esp2459; X86-SSE2-NEXT:    movdqa 8(%ebp), %xmm32460; X86-SSE2-NEXT:    pcmpeqb 72(%ebp), %xmm32461; X86-SSE2-NEXT:    pcmpeqb 40(%ebp), %xmm12462; X86-SSE2-NEXT:    pand %xmm3, %xmm12463; X86-SSE2-NEXT:    pcmpeqb 56(%ebp), %xmm22464; X86-SSE2-NEXT:    pcmpeqb 24(%ebp), %xmm02465; X86-SSE2-NEXT:    pand %xmm2, %xmm02466; X86-SSE2-NEXT:    pand %xmm1, %xmm02467; X86-SSE2-NEXT:    pmovmskb %xmm0, %eax2468; X86-SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF2469; X86-SSE2-NEXT:    sete %al2470; X86-SSE2-NEXT:    movl %ebp, %esp2471; X86-SSE2-NEXT:    popl %ebp2472; X86-SSE2-NEXT:    retl2473;2474; X64-SSE2-LABEL: icmp_v32i16_v32i1:2475; X64-SSE2:       # %bb.0:2476; X64-SSE2-NEXT:    pcmpeqb %xmm7, %xmm32477; X64-SSE2-NEXT:    pcmpeqb %xmm5, %xmm12478; X64-SSE2-NEXT:    pand %xmm3, %xmm12479; X64-SSE2-NEXT:    pcmpeqb %xmm6, %xmm22480; X64-SSE2-NEXT:    pcmpeqb %xmm4, %xmm02481; X64-SSE2-NEXT:    pand %xmm2, %xmm02482; X64-SSE2-NEXT:    pand %xmm1, %xmm02483; X64-SSE2-NEXT:    pmovmskb %xmm0, %eax2484; X64-SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF2485; X64-SSE2-NEXT:    sete %al2486; X64-SSE2-NEXT:    retq2487;2488; SSE41-LABEL: icmp_v32i16_v32i1:2489; SSE41:       # %bb.0:2490; SSE41-NEXT:    pxor %xmm7, %xmm32491; SSE41-NEXT:    pxor %xmm5, %xmm12492; SSE41-NEXT:    por %xmm3, %xmm12493; SSE41-NEXT:    pxor %xmm6, %xmm22494; SSE41-NEXT:    pxor %xmm4, %xmm02495; SSE41-NEXT:    por %xmm2, %xmm02496; SSE41-NEXT:    por %xmm1, %xmm02497; SSE41-NEXT:    ptest %xmm0, %xmm02498; SSE41-NEXT:    sete %al2499; SSE41-NEXT:    retq2500;2501; AVX1-LABEL: icmp_v32i16_v32i1:2502; AVX1:       # %bb.0:2503; AVX1-NEXT:    vxorps %ymm3, %ymm1, %ymm12504; AVX1-NEXT:    vxorps %ymm2, %ymm0, %ymm02505; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm02506; AVX1-NEXT:    vptest %ymm0, %ymm02507; AVX1-NEXT:    sete %al2508; AVX1-NEXT:    vzeroupper2509; AVX1-NEXT:    retq2510;2511; AVX2-LABEL: icmp_v32i16_v32i1:2512; AVX2:       # %bb.0:2513; AVX2-NEXT:    vpxor %ymm3, %ymm1, %ymm12514; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm02515; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm02516; AVX2-NEXT:    vptest %ymm0, %ymm02517; AVX2-NEXT:    sete %al2518; AVX2-NEXT:    vzeroupper2519; AVX2-NEXT:    retq2520;2521; AVX512-LABEL: icmp_v32i16_v32i1:2522; AVX512:       # %bb.0:2523; AVX512-NEXT:    vpcmpneqd %zmm1, %zmm0, %k02524; AVX512-NEXT:    kortestw %k0, %k02525; AVX512-NEXT:    sete %al2526; AVX512-NEXT:    vzeroupper2527; AVX512-NEXT:    retq2528  %a = icmp eq <32 x i16> %0, %12529  %b = call i1 @llvm.vector.reduce.and.v32i1(<32 x i1> %a)2530  ret i1 %b2531}2532 2533define i1 @icmp_v64i8_v64i1(<64 x i8>, <64 x i8>) nounwind {2534; X86-SSE2-LABEL: icmp_v64i8_v64i1:2535; X86-SSE2:       # %bb.0:2536; X86-SSE2-NEXT:    pushl %ebp2537; X86-SSE2-NEXT:    movl %esp, %ebp2538; X86-SSE2-NEXT:    andl $-16, %esp2539; X86-SSE2-NEXT:    subl $16, %esp2540; X86-SSE2-NEXT:    movdqa 8(%ebp), %xmm32541; X86-SSE2-NEXT:    pcmpeqb 72(%ebp), %xmm32542; X86-SSE2-NEXT:    pcmpeqb 40(%ebp), %xmm12543; X86-SSE2-NEXT:    pand %xmm3, %xmm12544; X86-SSE2-NEXT:    pcmpeqb 56(%ebp), %xmm22545; X86-SSE2-NEXT:    pcmpeqb 24(%ebp), %xmm02546; X86-SSE2-NEXT:    pand %xmm2, %xmm02547; X86-SSE2-NEXT:    pand %xmm1, %xmm02548; X86-SSE2-NEXT:    pmovmskb %xmm0, %eax2549; X86-SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF2550; X86-SSE2-NEXT:    sete %al2551; X86-SSE2-NEXT:    movl %ebp, %esp2552; X86-SSE2-NEXT:    popl %ebp2553; X86-SSE2-NEXT:    retl2554;2555; X64-SSE2-LABEL: icmp_v64i8_v64i1:2556; X64-SSE2:       # %bb.0:2557; X64-SSE2-NEXT:    pcmpeqb %xmm7, %xmm32558; X64-SSE2-NEXT:    pcmpeqb %xmm5, %xmm12559; X64-SSE2-NEXT:    pand %xmm3, %xmm12560; X64-SSE2-NEXT:    pcmpeqb %xmm6, %xmm22561; X64-SSE2-NEXT:    pcmpeqb %xmm4, %xmm02562; X64-SSE2-NEXT:    pand %xmm2, %xmm02563; X64-SSE2-NEXT:    pand %xmm1, %xmm02564; X64-SSE2-NEXT:    pmovmskb %xmm0, %eax2565; X64-SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF2566; X64-SSE2-NEXT:    sete %al2567; X64-SSE2-NEXT:    retq2568;2569; SSE41-LABEL: icmp_v64i8_v64i1:2570; SSE41:       # %bb.0:2571; SSE41-NEXT:    pxor %xmm7, %xmm32572; SSE41-NEXT:    pxor %xmm5, %xmm12573; SSE41-NEXT:    por %xmm3, %xmm12574; SSE41-NEXT:    pxor %xmm6, %xmm22575; SSE41-NEXT:    pxor %xmm4, %xmm02576; SSE41-NEXT:    por %xmm2, %xmm02577; SSE41-NEXT:    por %xmm1, %xmm02578; SSE41-NEXT:    ptest %xmm0, %xmm02579; SSE41-NEXT:    sete %al2580; SSE41-NEXT:    retq2581;2582; AVX1-LABEL: icmp_v64i8_v64i1:2583; AVX1:       # %bb.0:2584; AVX1-NEXT:    vxorps %ymm3, %ymm1, %ymm12585; AVX1-NEXT:    vxorps %ymm2, %ymm0, %ymm02586; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm02587; AVX1-NEXT:    vptest %ymm0, %ymm02588; AVX1-NEXT:    sete %al2589; AVX1-NEXT:    vzeroupper2590; AVX1-NEXT:    retq2591;2592; AVX2-LABEL: icmp_v64i8_v64i1:2593; AVX2:       # %bb.0:2594; AVX2-NEXT:    vpxor %ymm3, %ymm1, %ymm12595; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm02596; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm02597; AVX2-NEXT:    vptest %ymm0, %ymm02598; AVX2-NEXT:    sete %al2599; AVX2-NEXT:    vzeroupper2600; AVX2-NEXT:    retq2601;2602; AVX512-LABEL: icmp_v64i8_v64i1:2603; AVX512:       # %bb.0:2604; AVX512-NEXT:    vpcmpneqd %zmm1, %zmm0, %k02605; AVX512-NEXT:    kortestw %k0, %k02606; AVX512-NEXT:    sete %al2607; AVX512-NEXT:    vzeroupper2608; AVX512-NEXT:    retq2609  %a = icmp eq <64 x i8> %0, %12610  %b = call i1 @llvm.vector.reduce.and.v64i1(<64 x i1> %a)2611  ret i1 %b2612}2613 2614declare i1 @llvm.vector.reduce.and.v2i1(<2 x i1>)2615declare i1 @llvm.vector.reduce.and.v4i1(<4 x i1>)2616declare i1 @llvm.vector.reduce.and.v8i1(<8 x i1>)2617declare i1 @llvm.vector.reduce.and.v16i1(<16 x i1>)2618declare i1 @llvm.vector.reduce.and.v32i1(<32 x i1>)2619declare i1 @llvm.vector.reduce.and.v64i1(<64 x i1>)2620;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:2621; SSE: {{.*}}2622; X64-SSE: {{.*}}2623