brintos

brintos / llvm-project-archived public Read only

0
0
Text · 139.9 KiB · 2f8cd4d Raw
4605 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefixes=SSE,SSE23; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefixes=SSE,SSE414; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX1OR2,AVX15; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX1OR2,AVX26; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefixes=AVX,AVX512,KNL7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512dq,+avx512bw | FileCheck %s --check-prefixes=AVX,AVX512,SKX8 9define i1 @allones_v16i8_sign(<16 x i8> %arg) {10; SSE-LABEL: allones_v16i8_sign:11; SSE:       # %bb.0:12; SSE-NEXT:    pmovmskb %xmm0, %eax13; SSE-NEXT:    cmpl $65535, %eax # imm = 0xFFFF14; SSE-NEXT:    sete %al15; SSE-NEXT:    retq16;17; AVX-LABEL: allones_v16i8_sign:18; AVX:       # %bb.0:19; AVX-NEXT:    vpmovmskb %xmm0, %eax20; AVX-NEXT:    cmpl $65535, %eax # imm = 0xFFFF21; AVX-NEXT:    sete %al22; AVX-NEXT:    retq23  %tmp = icmp slt <16 x i8> %arg, zeroinitializer24  %tmp1 = bitcast <16 x i1> %tmp to i1625  %tmp2 = icmp eq i16 %tmp1, -126  ret i1 %tmp227}28 29define i1 @allzeros_v16i8_sign(<16 x i8> %arg) {30; SSE-LABEL: allzeros_v16i8_sign:31; SSE:       # %bb.0:32; SSE-NEXT:    pmovmskb %xmm0, %eax33; SSE-NEXT:    testl %eax, %eax34; SSE-NEXT:    sete %al35; SSE-NEXT:    retq36;37; AVX-LABEL: allzeros_v16i8_sign:38; AVX:       # %bb.0:39; AVX-NEXT:    vpmovmskb %xmm0, %eax40; AVX-NEXT:    testl %eax, %eax41; AVX-NEXT:    sete %al42; AVX-NEXT:    retq43  %tmp = icmp slt <16 x i8> %arg, zeroinitializer44  %tmp1 = bitcast <16 x i1> %tmp to i1645  %tmp2 = icmp eq i16 %tmp1, 046  ret i1 %tmp247}48 49define i1 @allones_v32i8_sign(<32 x i8> %arg) {50; SSE-LABEL: allones_v32i8_sign:51; SSE:       # %bb.0:52; SSE-NEXT:    pand %xmm1, %xmm053; SSE-NEXT:    pmovmskb %xmm0, %eax54; SSE-NEXT:    cmpl $65535, %eax # imm = 0xFFFF55; SSE-NEXT:    sete %al56; SSE-NEXT:    retq57;58; AVX1-LABEL: allones_v32i8_sign:59; AVX1:       # %bb.0:60; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm161; AVX1-NEXT:    vpand %xmm0, %xmm1, %xmm062; AVX1-NEXT:    vpmovmskb %xmm0, %eax63; AVX1-NEXT:    cmpl $65535, %eax # imm = 0xFFFF64; AVX1-NEXT:    sete %al65; AVX1-NEXT:    vzeroupper66; AVX1-NEXT:    retq67;68; AVX2-LABEL: allones_v32i8_sign:69; AVX2:       # %bb.0:70; AVX2-NEXT:    vpmovmskb %ymm0, %eax71; AVX2-NEXT:    cmpl $-1, %eax72; AVX2-NEXT:    sete %al73; AVX2-NEXT:    vzeroupper74; AVX2-NEXT:    retq75;76; AVX512-LABEL: allones_v32i8_sign:77; AVX512:       # %bb.0:78; AVX512-NEXT:    vpmovmskb %ymm0, %eax79; AVX512-NEXT:    cmpl $-1, %eax80; AVX512-NEXT:    sete %al81; AVX512-NEXT:    vzeroupper82; AVX512-NEXT:    retq83  %tmp = icmp slt <32 x i8> %arg, zeroinitializer84  %tmp1 = bitcast <32 x i1> %tmp to i3285  %tmp2 = icmp eq i32 %tmp1, -186  ret i1 %tmp287}88 89define i1 @allzeros_v32i8_sign(<32 x i8> %arg) {90; SSE-LABEL: allzeros_v32i8_sign:91; SSE:       # %bb.0:92; SSE-NEXT:    por %xmm1, %xmm093; SSE-NEXT:    pmovmskb %xmm0, %eax94; SSE-NEXT:    testl %eax, %eax95; SSE-NEXT:    sete %al96; SSE-NEXT:    retq97;98; AVX1-LABEL: allzeros_v32i8_sign:99; AVX1:       # %bb.0:100; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1101; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0102; AVX1-NEXT:    vpmovmskb %xmm0, %eax103; AVX1-NEXT:    testl %eax, %eax104; AVX1-NEXT:    sete %al105; AVX1-NEXT:    vzeroupper106; AVX1-NEXT:    retq107;108; AVX2-LABEL: allzeros_v32i8_sign:109; AVX2:       # %bb.0:110; AVX2-NEXT:    vpmovmskb %ymm0, %eax111; AVX2-NEXT:    testl %eax, %eax112; AVX2-NEXT:    sete %al113; AVX2-NEXT:    vzeroupper114; AVX2-NEXT:    retq115;116; AVX512-LABEL: allzeros_v32i8_sign:117; AVX512:       # %bb.0:118; AVX512-NEXT:    vpmovmskb %ymm0, %eax119; AVX512-NEXT:    testl %eax, %eax120; AVX512-NEXT:    sete %al121; AVX512-NEXT:    vzeroupper122; AVX512-NEXT:    retq123  %tmp = icmp slt <32 x i8> %arg, zeroinitializer124  %tmp1 = bitcast <32 x i1> %tmp to i32125  %tmp2 = icmp eq i32 %tmp1, 0126  ret i1 %tmp2127}128 129define i1 @allones_v64i8_sign(<64 x i8> %arg) {130; SSE-LABEL: allones_v64i8_sign:131; SSE:       # %bb.0:132; SSE-NEXT:    pand %xmm2, %xmm0133; SSE-NEXT:    pand %xmm3, %xmm1134; SSE-NEXT:    pand %xmm0, %xmm1135; SSE-NEXT:    pmovmskb %xmm1, %eax136; SSE-NEXT:    cmpl $65535, %eax # imm = 0xFFFF137; SSE-NEXT:    sete %al138; SSE-NEXT:    retq139;140; AVX1-LABEL: allones_v64i8_sign:141; AVX1:       # %bb.0:142; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2143; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3144; AVX1-NEXT:    vpand %xmm2, %xmm3, %xmm2145; AVX1-NEXT:    vpand %xmm0, %xmm1, %xmm0146; AVX1-NEXT:    vpand %xmm0, %xmm2, %xmm0147; AVX1-NEXT:    vpmovmskb %xmm0, %eax148; AVX1-NEXT:    cmpl $65535, %eax # imm = 0xFFFF149; AVX1-NEXT:    sete %al150; AVX1-NEXT:    vzeroupper151; AVX1-NEXT:    retq152;153; AVX2-LABEL: allones_v64i8_sign:154; AVX2:       # %bb.0:155; AVX2-NEXT:    vpand %ymm0, %ymm1, %ymm0156; AVX2-NEXT:    vpmovmskb %ymm0, %eax157; AVX2-NEXT:    cmpl $-1, %eax158; AVX2-NEXT:    sete %al159; AVX2-NEXT:    vzeroupper160; AVX2-NEXT:    retq161;162; KNL-LABEL: allones_v64i8_sign:163; KNL:       # %bb.0:164; KNL-NEXT:    vextracti64x4 $1, %zmm0, %ymm1165; KNL-NEXT:    vpand %ymm0, %ymm1, %ymm0166; KNL-NEXT:    vpmovmskb %ymm0, %eax167; KNL-NEXT:    cmpl $-1, %eax168; KNL-NEXT:    sete %al169; KNL-NEXT:    vzeroupper170; KNL-NEXT:    retq171;172; SKX-LABEL: allones_v64i8_sign:173; SKX:       # %bb.0:174; SKX-NEXT:    vpmovb2m %zmm0, %k0175; SKX-NEXT:    kortestq %k0, %k0176; SKX-NEXT:    setb %al177; SKX-NEXT:    vzeroupper178; SKX-NEXT:    retq179  %tmp = icmp slt <64 x i8> %arg, zeroinitializer180  %tmp1 = bitcast <64 x i1> %tmp to i64181  %tmp2 = icmp eq i64 %tmp1, -1182  ret i1 %tmp2183}184 185define i1 @allzeros_v64i8_sign(<64 x i8> %arg) {186; SSE-LABEL: allzeros_v64i8_sign:187; SSE:       # %bb.0:188; SSE-NEXT:    por %xmm3, %xmm1189; SSE-NEXT:    por %xmm2, %xmm0190; SSE-NEXT:    por %xmm1, %xmm0191; SSE-NEXT:    pmovmskb %xmm0, %eax192; SSE-NEXT:    testl %eax, %eax193; SSE-NEXT:    sete %al194; SSE-NEXT:    retq195;196; AVX1-LABEL: allzeros_v64i8_sign:197; AVX1:       # %bb.0:198; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2199; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3200; AVX1-NEXT:    vpor %xmm2, %xmm3, %xmm2201; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0202; AVX1-NEXT:    vpor %xmm2, %xmm0, %xmm0203; AVX1-NEXT:    vpmovmskb %xmm0, %eax204; AVX1-NEXT:    testl %eax, %eax205; AVX1-NEXT:    sete %al206; AVX1-NEXT:    vzeroupper207; AVX1-NEXT:    retq208;209; AVX2-LABEL: allzeros_v64i8_sign:210; AVX2:       # %bb.0:211; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm0212; AVX2-NEXT:    vpmovmskb %ymm0, %eax213; AVX2-NEXT:    testl %eax, %eax214; AVX2-NEXT:    sete %al215; AVX2-NEXT:    vzeroupper216; AVX2-NEXT:    retq217;218; KNL-LABEL: allzeros_v64i8_sign:219; KNL:       # %bb.0:220; KNL-NEXT:    vextracti64x4 $1, %zmm0, %ymm1221; KNL-NEXT:    vpor %ymm1, %ymm0, %ymm0222; KNL-NEXT:    vpmovmskb %ymm0, %eax223; KNL-NEXT:    testl %eax, %eax224; KNL-NEXT:    sete %al225; KNL-NEXT:    vzeroupper226; KNL-NEXT:    retq227;228; SKX-LABEL: allzeros_v64i8_sign:229; SKX:       # %bb.0:230; SKX-NEXT:    vpmovb2m %zmm0, %k0231; SKX-NEXT:    kortestq %k0, %k0232; SKX-NEXT:    sete %al233; SKX-NEXT:    vzeroupper234; SKX-NEXT:    retq235  %tmp = icmp slt <64 x i8> %arg, zeroinitializer236  %tmp1 = bitcast <64 x i1> %tmp to i64237  %tmp2 = icmp eq i64 %tmp1, 0238  ret i1 %tmp2239}240 241define i1 @allones_v8i16_sign(<8 x i16> %arg) {242; SSE-LABEL: allones_v8i16_sign:243; SSE:       # %bb.0:244; SSE-NEXT:    packsswb %xmm0, %xmm0245; SSE-NEXT:    pmovmskb %xmm0, %eax246; SSE-NEXT:    cmpb $-1, %al247; SSE-NEXT:    sete %al248; SSE-NEXT:    retq249;250; AVX1OR2-LABEL: allones_v8i16_sign:251; AVX1OR2:       # %bb.0:252; AVX1OR2-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0253; AVX1OR2-NEXT:    vpmovmskb %xmm0, %eax254; AVX1OR2-NEXT:    cmpb $-1, %al255; AVX1OR2-NEXT:    sete %al256; AVX1OR2-NEXT:    retq257;258; KNL-LABEL: allones_v8i16_sign:259; KNL:       # %bb.0:260; KNL-NEXT:    vpxor %xmm1, %xmm1, %xmm1261; KNL-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0262; KNL-NEXT:    vpmovsxwq %xmm0, %zmm0263; KNL-NEXT:    vptestmq %zmm0, %zmm0, %k0264; KNL-NEXT:    kmovw %k0, %eax265; KNL-NEXT:    cmpb $-1, %al266; KNL-NEXT:    sete %al267; KNL-NEXT:    vzeroupper268; KNL-NEXT:    retq269;270; SKX-LABEL: allones_v8i16_sign:271; SKX:       # %bb.0:272; SKX-NEXT:    vpmovw2m %xmm0, %k0273; SKX-NEXT:    kortestb %k0, %k0274; SKX-NEXT:    setb %al275; SKX-NEXT:    retq276  %tmp = icmp slt <8 x i16> %arg, zeroinitializer277  %tmp1 = bitcast <8 x i1> %tmp to i8278  %tmp2 = icmp eq i8 %tmp1, -1279  ret i1 %tmp2280}281 282define i1 @allzeros_v8i16_sign(<8 x i16> %arg) {283; SSE-LABEL: allzeros_v8i16_sign:284; SSE:       # %bb.0:285; SSE-NEXT:    pmovmskb %xmm0, %eax286; SSE-NEXT:    testl $43690, %eax # imm = 0xAAAA287; SSE-NEXT:    sete %al288; SSE-NEXT:    retq289;290; AVX1OR2-LABEL: allzeros_v8i16_sign:291; AVX1OR2:       # %bb.0:292; AVX1OR2-NEXT:    vpmovmskb %xmm0, %eax293; AVX1OR2-NEXT:    testl $43690, %eax # imm = 0xAAAA294; AVX1OR2-NEXT:    sete %al295; AVX1OR2-NEXT:    retq296;297; KNL-LABEL: allzeros_v8i16_sign:298; KNL:       # %bb.0:299; KNL-NEXT:    vpxor %xmm1, %xmm1, %xmm1300; KNL-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0301; KNL-NEXT:    vpmovsxwq %xmm0, %zmm0302; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0303; KNL-NEXT:    kortestw %k0, %k0304; KNL-NEXT:    sete %al305; KNL-NEXT:    vzeroupper306; KNL-NEXT:    retq307;308; SKX-LABEL: allzeros_v8i16_sign:309; SKX:       # %bb.0:310; SKX-NEXT:    vpmovw2m %xmm0, %k0311; SKX-NEXT:    kortestb %k0, %k0312; SKX-NEXT:    sete %al313; SKX-NEXT:    retq314  %tmp = icmp slt <8 x i16> %arg, zeroinitializer315  %tmp1 = bitcast <8 x i1> %tmp to i8316  %tmp2 = icmp eq i8 %tmp1, 0317  ret i1 %tmp2318}319 320define i1 @allones_v16i16_sign(<16 x i16> %arg) {321; SSE-LABEL: allones_v16i16_sign:322; SSE:       # %bb.0:323; SSE-NEXT:    packsswb %xmm1, %xmm0324; SSE-NEXT:    pmovmskb %xmm0, %eax325; SSE-NEXT:    cmpl $65535, %eax # imm = 0xFFFF326; SSE-NEXT:    sete %al327; SSE-NEXT:    retq328;329; AVX1-LABEL: allones_v16i16_sign:330; AVX1:       # %bb.0:331; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1332; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0333; AVX1-NEXT:    vpmovmskb %xmm0, %eax334; AVX1-NEXT:    cmpl $65535, %eax # imm = 0xFFFF335; AVX1-NEXT:    sete %al336; AVX1-NEXT:    vzeroupper337; AVX1-NEXT:    retq338;339; AVX2-LABEL: allones_v16i16_sign:340; AVX2:       # %bb.0:341; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1342; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0343; AVX2-NEXT:    vpmovmskb %xmm0, %eax344; AVX2-NEXT:    cmpl $65535, %eax # imm = 0xFFFF345; AVX2-NEXT:    sete %al346; AVX2-NEXT:    vzeroupper347; AVX2-NEXT:    retq348;349; KNL-LABEL: allones_v16i16_sign:350; KNL:       # %bb.0:351; KNL-NEXT:    vpxor %xmm1, %xmm1, %xmm1352; KNL-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0353; KNL-NEXT:    vpmovsxwd %ymm0, %zmm0354; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0355; KNL-NEXT:    kortestw %k0, %k0356; KNL-NEXT:    setb %al357; KNL-NEXT:    vzeroupper358; KNL-NEXT:    retq359;360; SKX-LABEL: allones_v16i16_sign:361; SKX:       # %bb.0:362; SKX-NEXT:    vpmovw2m %ymm0, %k0363; SKX-NEXT:    kortestw %k0, %k0364; SKX-NEXT:    setb %al365; SKX-NEXT:    vzeroupper366; SKX-NEXT:    retq367  %tmp = icmp slt <16 x i16> %arg, zeroinitializer368  %tmp1 = bitcast <16 x i1> %tmp to i16369  %tmp2 = icmp eq i16 %tmp1, -1370  ret i1 %tmp2371}372 373define i1 @allzeros_v16i16_sign(<16 x i16> %arg) {374; SSE-LABEL: allzeros_v16i16_sign:375; SSE:       # %bb.0:376; SSE-NEXT:    packsswb %xmm1, %xmm0377; SSE-NEXT:    pmovmskb %xmm0, %eax378; SSE-NEXT:    testl %eax, %eax379; SSE-NEXT:    sete %al380; SSE-NEXT:    retq381;382; AVX1-LABEL: allzeros_v16i16_sign:383; AVX1:       # %bb.0:384; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1385; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0386; AVX1-NEXT:    vpmovmskb %xmm0, %eax387; AVX1-NEXT:    testl %eax, %eax388; AVX1-NEXT:    sete %al389; AVX1-NEXT:    vzeroupper390; AVX1-NEXT:    retq391;392; AVX2-LABEL: allzeros_v16i16_sign:393; AVX2:       # %bb.0:394; AVX2-NEXT:    vpmovmskb %ymm0, %eax395; AVX2-NEXT:    testl $-1431655766, %eax # imm = 0xAAAAAAAA396; AVX2-NEXT:    sete %al397; AVX2-NEXT:    vzeroupper398; AVX2-NEXT:    retq399;400; KNL-LABEL: allzeros_v16i16_sign:401; KNL:       # %bb.0:402; KNL-NEXT:    vpxor %xmm1, %xmm1, %xmm1403; KNL-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0404; KNL-NEXT:    vpmovsxwd %ymm0, %zmm0405; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0406; KNL-NEXT:    kortestw %k0, %k0407; KNL-NEXT:    sete %al408; KNL-NEXT:    vzeroupper409; KNL-NEXT:    retq410;411; SKX-LABEL: allzeros_v16i16_sign:412; SKX:       # %bb.0:413; SKX-NEXT:    vpmovw2m %ymm0, %k0414; SKX-NEXT:    kortestw %k0, %k0415; SKX-NEXT:    sete %al416; SKX-NEXT:    vzeroupper417; SKX-NEXT:    retq418  %tmp = icmp slt <16 x i16> %arg, zeroinitializer419  %tmp1 = bitcast <16 x i1> %tmp to i16420  %tmp2 = icmp eq i16 %tmp1, 0421  ret i1 %tmp2422}423 424define i1 @allones_v32i16_sign(<32 x i16> %arg) {425; SSE-LABEL: allones_v32i16_sign:426; SSE:       # %bb.0:427; SSE-NEXT:    packsswb %xmm1, %xmm0428; SSE-NEXT:    packsswb %xmm3, %xmm2429; SSE-NEXT:    pand %xmm0, %xmm2430; SSE-NEXT:    pmovmskb %xmm2, %eax431; SSE-NEXT:    cmpl $65535, %eax # imm = 0xFFFF432; SSE-NEXT:    sete %al433; SSE-NEXT:    retq434;435; AVX1-LABEL: allones_v32i16_sign:436; AVX1:       # %bb.0:437; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2438; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3439; AVX1-NEXT:    vpand %xmm2, %xmm3, %xmm2440; AVX1-NEXT:    vpand %xmm0, %xmm1, %xmm0441; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0442; AVX1-NEXT:    vpmovmskb %xmm0, %eax443; AVX1-NEXT:    cmpl $65535, %eax # imm = 0xFFFF444; AVX1-NEXT:    sete %al445; AVX1-NEXT:    vzeroupper446; AVX1-NEXT:    retq447;448; AVX2-LABEL: allones_v32i16_sign:449; AVX2:       # %bb.0:450; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0451; AVX2-NEXT:    vpmovmskb %ymm0, %eax452; AVX2-NEXT:    cmpl $-1, %eax453; AVX2-NEXT:    sete %al454; AVX2-NEXT:    vzeroupper455; AVX2-NEXT:    retq456;457; KNL-LABEL: allones_v32i16_sign:458; KNL:       # %bb.0:459; KNL-NEXT:    vpxor %xmm1, %xmm1, %xmm1460; KNL-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm2461; KNL-NEXT:    vpmovsxwd %ymm2, %zmm2462; KNL-NEXT:    vptestmd %zmm2, %zmm2, %k0463; KNL-NEXT:    kmovw %k0, %eax464; KNL-NEXT:    vextracti64x4 $1, %zmm0, %ymm0465; KNL-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0466; KNL-NEXT:    vpmovsxwd %ymm0, %zmm0467; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0468; KNL-NEXT:    kmovw %k0, %ecx469; KNL-NEXT:    andl %eax, %ecx470; KNL-NEXT:    cmpl $65535, %ecx # imm = 0xFFFF471; KNL-NEXT:    sete %al472; KNL-NEXT:    vzeroupper473; KNL-NEXT:    retq474;475; SKX-LABEL: allones_v32i16_sign:476; SKX:       # %bb.0:477; SKX-NEXT:    vpmovw2m %zmm0, %k0478; SKX-NEXT:    kortestd %k0, %k0479; SKX-NEXT:    setb %al480; SKX-NEXT:    vzeroupper481; SKX-NEXT:    retq482  %tmp = icmp slt <32 x i16> %arg, zeroinitializer483  %tmp1 = bitcast <32 x i1> %tmp to i32484  %tmp2 = icmp eq i32 %tmp1, -1485  ret i1 %tmp2486}487 488define i1 @allzeros_v32i16_sign(<32 x i16> %arg) {489; SSE-LABEL: allzeros_v32i16_sign:490; SSE:       # %bb.0:491; SSE-NEXT:    packsswb %xmm3, %xmm2492; SSE-NEXT:    packsswb %xmm1, %xmm0493; SSE-NEXT:    por %xmm2, %xmm0494; SSE-NEXT:    pmovmskb %xmm0, %eax495; SSE-NEXT:    testl %eax, %eax496; SSE-NEXT:    sete %al497; SSE-NEXT:    retq498;499; AVX1-LABEL: allzeros_v32i16_sign:500; AVX1:       # %bb.0:501; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2502; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3503; AVX1-NEXT:    vpor %xmm2, %xmm3, %xmm2504; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0505; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0506; AVX1-NEXT:    vpmovmskb %xmm0, %eax507; AVX1-NEXT:    testl %eax, %eax508; AVX1-NEXT:    sete %al509; AVX1-NEXT:    vzeroupper510; AVX1-NEXT:    retq511;512; AVX2-LABEL: allzeros_v32i16_sign:513; AVX2:       # %bb.0:514; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0515; AVX2-NEXT:    vpmovmskb %ymm0, %eax516; AVX2-NEXT:    testl %eax, %eax517; AVX2-NEXT:    sete %al518; AVX2-NEXT:    vzeroupper519; AVX2-NEXT:    retq520;521; KNL-LABEL: allzeros_v32i16_sign:522; KNL:       # %bb.0:523; KNL-NEXT:    vextracti64x4 $1, %zmm0, %ymm1524; KNL-NEXT:    vpxor %xmm2, %xmm2, %xmm2525; KNL-NEXT:    vpcmpgtw %ymm1, %ymm2, %ymm1526; KNL-NEXT:    vpcmpgtw %ymm0, %ymm2, %ymm0527; KNL-NEXT:    vpor %ymm1, %ymm0, %ymm0528; KNL-NEXT:    vpmovsxwd %ymm0, %zmm0529; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0530; KNL-NEXT:    kortestw %k0, %k0531; KNL-NEXT:    sete %al532; KNL-NEXT:    vzeroupper533; KNL-NEXT:    retq534;535; SKX-LABEL: allzeros_v32i16_sign:536; SKX:       # %bb.0:537; SKX-NEXT:    vpmovw2m %zmm0, %k0538; SKX-NEXT:    kortestd %k0, %k0539; SKX-NEXT:    sete %al540; SKX-NEXT:    vzeroupper541; SKX-NEXT:    retq542  %tmp = icmp slt <32 x i16> %arg, zeroinitializer543  %tmp1 = bitcast <32 x i1> %tmp to i32544  %tmp2 = icmp eq i32 %tmp1, 0545  ret i1 %tmp2546}547 548define i1 @allones_v4i32_sign(<4 x i32> %arg) {549; SSE-LABEL: allones_v4i32_sign:550; SSE:       # %bb.0:551; SSE-NEXT:    movmskps %xmm0, %eax552; SSE-NEXT:    cmpl $15, %eax553; SSE-NEXT:    sete %al554; SSE-NEXT:    retq555;556; AVX-LABEL: allones_v4i32_sign:557; AVX:       # %bb.0:558; AVX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1559; AVX-NEXT:    vtestps %xmm1, %xmm0560; AVX-NEXT:    setb %al561; AVX-NEXT:    retq562  %tmp = icmp slt <4 x i32> %arg, zeroinitializer563  %tmp1 = bitcast <4 x i1> %tmp to i4564  %tmp2 = icmp eq i4 %tmp1, -1565  ret i1 %tmp2566}567 568define i1 @allzeros_v4i32_sign(<4 x i32> %arg) {569; SSE-LABEL: allzeros_v4i32_sign:570; SSE:       # %bb.0:571; SSE-NEXT:    movmskps %xmm0, %eax572; SSE-NEXT:    testl %eax, %eax573; SSE-NEXT:    sete %al574; SSE-NEXT:    retq575;576; AVX-LABEL: allzeros_v4i32_sign:577; AVX:       # %bb.0:578; AVX-NEXT:    vtestps %xmm0, %xmm0579; AVX-NEXT:    sete %al580; AVX-NEXT:    retq581  %tmp = icmp slt <4 x i32> %arg, zeroinitializer582  %tmp1 = bitcast <4 x i1> %tmp to i4583  %tmp2 = icmp eq i4 %tmp1, 0584  ret i1 %tmp2585}586 587define i1 @allones_v8i32_sign(<8 x i32> %arg) {588; SSE-LABEL: allones_v8i32_sign:589; SSE:       # %bb.0:590; SSE-NEXT:    packssdw %xmm1, %xmm0591; SSE-NEXT:    packsswb %xmm0, %xmm0592; SSE-NEXT:    pmovmskb %xmm0, %eax593; SSE-NEXT:    cmpb $-1, %al594; SSE-NEXT:    sete %al595; SSE-NEXT:    retq596;597; AVX1-LABEL: allones_v8i32_sign:598; AVX1:       # %bb.0:599; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm1600; AVX1-NEXT:    vcmptrueps %ymm1, %ymm1, %ymm1601; AVX1-NEXT:    vtestps %ymm1, %ymm0602; AVX1-NEXT:    setb %al603; AVX1-NEXT:    vzeroupper604; AVX1-NEXT:    retq605;606; AVX2-LABEL: allones_v8i32_sign:607; AVX2:       # %bb.0:608; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1609; AVX2-NEXT:    vtestps %ymm1, %ymm0610; AVX2-NEXT:    setb %al611; AVX2-NEXT:    vzeroupper612; AVX2-NEXT:    retq613;614; AVX512-LABEL: allones_v8i32_sign:615; AVX512:       # %bb.0:616; AVX512-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1617; AVX512-NEXT:    vtestps %ymm1, %ymm0618; AVX512-NEXT:    setb %al619; AVX512-NEXT:    vzeroupper620; AVX512-NEXT:    retq621  %tmp = icmp slt <8 x i32> %arg, zeroinitializer622  %tmp1 = bitcast <8 x i1> %tmp to i8623  %tmp2 = icmp eq i8 %tmp1, -1624  ret i1 %tmp2625}626 627define i1 @allzeros_v8i32_sign(<8 x i32> %arg) {628; SSE-LABEL: allzeros_v8i32_sign:629; SSE:       # %bb.0:630; SSE-NEXT:    packssdw %xmm1, %xmm0631; SSE-NEXT:    pmovmskb %xmm0, %eax632; SSE-NEXT:    testl $43690, %eax # imm = 0xAAAA633; SSE-NEXT:    sete %al634; SSE-NEXT:    retq635;636; AVX-LABEL: allzeros_v8i32_sign:637; AVX:       # %bb.0:638; AVX-NEXT:    vtestps %ymm0, %ymm0639; AVX-NEXT:    sete %al640; AVX-NEXT:    vzeroupper641; AVX-NEXT:    retq642  %tmp = icmp slt <8 x i32> %arg, zeroinitializer643  %tmp1 = bitcast <8 x i1> %tmp to i8644  %tmp2 = icmp eq i8 %tmp1, 0645  ret i1 %tmp2646}647 648define i1 @allones_v16i32_sign(<16 x i32> %arg) {649; SSE-LABEL: allones_v16i32_sign:650; SSE:       # %bb.0:651; SSE-NEXT:    packssdw %xmm3, %xmm2652; SSE-NEXT:    packssdw %xmm1, %xmm0653; SSE-NEXT:    packsswb %xmm2, %xmm0654; SSE-NEXT:    pmovmskb %xmm0, %eax655; SSE-NEXT:    cmpl $65535, %eax # imm = 0xFFFF656; SSE-NEXT:    sete %al657; SSE-NEXT:    retq658;659; AVX1-LABEL: allones_v16i32_sign:660; AVX1:       # %bb.0:661; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2662; AVX1-NEXT:    vpackssdw %xmm2, %xmm1, %xmm1663; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2664; AVX1-NEXT:    vpackssdw %xmm2, %xmm0, %xmm0665; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0666; AVX1-NEXT:    vpmovmskb %xmm0, %eax667; AVX1-NEXT:    cmpl $65535, %eax # imm = 0xFFFF668; AVX1-NEXT:    sete %al669; AVX1-NEXT:    vzeroupper670; AVX1-NEXT:    retq671;672; AVX2-LABEL: allones_v16i32_sign:673; AVX2:       # %bb.0:674; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2675; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm2, %ymm1676; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm2, %ymm0677; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0678; AVX2-NEXT:    vpmovmskb %ymm0, %eax679; AVX2-NEXT:    cmpl $-1, %eax680; AVX2-NEXT:    sete %al681; AVX2-NEXT:    vzeroupper682; AVX2-NEXT:    retq683;684; KNL-LABEL: allones_v16i32_sign:685; KNL:       # %bb.0:686; KNL-NEXT:    vpxor %xmm1, %xmm1, %xmm1687; KNL-NEXT:    vpcmpgtd %zmm0, %zmm1, %k0688; KNL-NEXT:    kortestw %k0, %k0689; KNL-NEXT:    setb %al690; KNL-NEXT:    vzeroupper691; KNL-NEXT:    retq692;693; SKX-LABEL: allones_v16i32_sign:694; SKX:       # %bb.0:695; SKX-NEXT:    vpmovd2m %zmm0, %k0696; SKX-NEXT:    kortestw %k0, %k0697; SKX-NEXT:    setb %al698; SKX-NEXT:    vzeroupper699; SKX-NEXT:    retq700  %tmp = icmp slt <16 x i32> %arg, zeroinitializer701  %tmp1 = bitcast <16 x i1> %tmp to i16702  %tmp2 = icmp eq i16 %tmp1, -1703  ret i1 %tmp2704}705 706define i1 @allzeros_v16i32_sign(<16 x i32> %arg) {707; SSE-LABEL: allzeros_v16i32_sign:708; SSE:       # %bb.0:709; SSE-NEXT:    packssdw %xmm3, %xmm2710; SSE-NEXT:    packssdw %xmm1, %xmm0711; SSE-NEXT:    packsswb %xmm2, %xmm0712; SSE-NEXT:    pmovmskb %xmm0, %eax713; SSE-NEXT:    testl %eax, %eax714; SSE-NEXT:    sete %al715; SSE-NEXT:    retq716;717; AVX1-LABEL: allzeros_v16i32_sign:718; AVX1:       # %bb.0:719; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2720; AVX1-NEXT:    vpackssdw %xmm2, %xmm1, %xmm1721; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2722; AVX1-NEXT:    vpackssdw %xmm2, %xmm0, %xmm0723; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0724; AVX1-NEXT:    vpmovmskb %xmm0, %eax725; AVX1-NEXT:    testl %eax, %eax726; AVX1-NEXT:    sete %al727; AVX1-NEXT:    vzeroupper728; AVX1-NEXT:    retq729;730; AVX2-LABEL: allzeros_v16i32_sign:731; AVX2:       # %bb.0:732; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2733; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm2, %ymm1734; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm2, %ymm0735; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0736; AVX2-NEXT:    vpmovmskb %ymm0, %eax737; AVX2-NEXT:    testl %eax, %eax738; AVX2-NEXT:    sete %al739; AVX2-NEXT:    vzeroupper740; AVX2-NEXT:    retq741;742; KNL-LABEL: allzeros_v16i32_sign:743; KNL:       # %bb.0:744; KNL-NEXT:    vpxor %xmm1, %xmm1, %xmm1745; KNL-NEXT:    vpcmpgtd %zmm0, %zmm1, %k0746; KNL-NEXT:    kortestw %k0, %k0747; KNL-NEXT:    sete %al748; KNL-NEXT:    vzeroupper749; KNL-NEXT:    retq750;751; SKX-LABEL: allzeros_v16i32_sign:752; SKX:       # %bb.0:753; SKX-NEXT:    vpmovd2m %zmm0, %k0754; SKX-NEXT:    kortestw %k0, %k0755; SKX-NEXT:    sete %al756; SKX-NEXT:    vzeroupper757; SKX-NEXT:    retq758  %tmp = icmp slt <16 x i32> %arg, zeroinitializer759  %tmp1 = bitcast <16 x i1> %tmp to i16760  %tmp2 = icmp eq i16 %tmp1, 0761  ret i1 %tmp2762}763 764define i1 @allones_v4i64_sign(<4 x i64> %arg) {765; SSE-LABEL: allones_v4i64_sign:766; SSE:       # %bb.0:767; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,3],xmm1[1,3]768; SSE-NEXT:    movmskps %xmm0, %eax769; SSE-NEXT:    cmpl $15, %eax770; SSE-NEXT:    sete %al771; SSE-NEXT:    retq772;773; AVX1-LABEL: allones_v4i64_sign:774; AVX1:       # %bb.0:775; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm1776; AVX1-NEXT:    vcmptrueps %ymm1, %ymm1, %ymm1777; AVX1-NEXT:    vtestpd %ymm1, %ymm0778; AVX1-NEXT:    setb %al779; AVX1-NEXT:    vzeroupper780; AVX1-NEXT:    retq781;782; AVX2-LABEL: allones_v4i64_sign:783; AVX2:       # %bb.0:784; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1785; AVX2-NEXT:    vtestpd %ymm1, %ymm0786; AVX2-NEXT:    setb %al787; AVX2-NEXT:    vzeroupper788; AVX2-NEXT:    retq789;790; AVX512-LABEL: allones_v4i64_sign:791; AVX512:       # %bb.0:792; AVX512-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1793; AVX512-NEXT:    vtestpd %ymm1, %ymm0794; AVX512-NEXT:    setb %al795; AVX512-NEXT:    vzeroupper796; AVX512-NEXT:    retq797  %tmp = icmp slt <4 x i64> %arg, zeroinitializer798  %tmp1 = bitcast <4 x i1> %tmp to i4799  %tmp2 = icmp eq i4 %tmp1, -1800  ret i1 %tmp2801}802 803define i1 @allzeros_v4i64_sign(<4 x i64> %arg) {804; SSE-LABEL: allzeros_v4i64_sign:805; SSE:       # %bb.0:806; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,3],xmm1[1,3]807; SSE-NEXT:    movmskps %xmm0, %eax808; SSE-NEXT:    testl %eax, %eax809; SSE-NEXT:    sete %al810; SSE-NEXT:    retq811;812; AVX-LABEL: allzeros_v4i64_sign:813; AVX:       # %bb.0:814; AVX-NEXT:    vtestpd %ymm0, %ymm0815; AVX-NEXT:    sete %al816; AVX-NEXT:    vzeroupper817; AVX-NEXT:    retq818  %tmp = icmp slt <4 x i64> %arg, zeroinitializer819  %tmp1 = bitcast <4 x i1> %tmp to i4820  %tmp2 = icmp eq i4 %tmp1, 0821  ret i1 %tmp2822}823 824define i1 @allones_v8i64_sign(<8 x i64> %arg) {825; SSE-LABEL: allones_v8i64_sign:826; SSE:       # %bb.0:827; SSE-NEXT:    packssdw %xmm3, %xmm2828; SSE-NEXT:    packssdw %xmm1, %xmm0829; SSE-NEXT:    packssdw %xmm2, %xmm0830; SSE-NEXT:    packsswb %xmm0, %xmm0831; SSE-NEXT:    pmovmskb %xmm0, %eax832; SSE-NEXT:    cmpb $-1, %al833; SSE-NEXT:    sete %al834; SSE-NEXT:    retq835;836; AVX1-LABEL: allones_v8i64_sign:837; AVX1:       # %bb.0:838; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2839; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3840; AVX1-NEXT:    vpand %xmm2, %xmm3, %xmm2841; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0842; AVX1-NEXT:    vpackssdw %xmm2, %xmm0, %xmm0843; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1844; AVX1-NEXT:    vtestps %xmm1, %xmm0845; AVX1-NEXT:    setb %al846; AVX1-NEXT:    vzeroupper847; AVX1-NEXT:    retq848;849; AVX2-LABEL: allones_v8i64_sign:850; AVX2:       # %bb.0:851; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0852; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1853; AVX2-NEXT:    vtestps %ymm1, %ymm0854; AVX2-NEXT:    setb %al855; AVX2-NEXT:    vzeroupper856; AVX2-NEXT:    retq857;858; KNL-LABEL: allones_v8i64_sign:859; KNL:       # %bb.0:860; KNL-NEXT:    vpxor %xmm1, %xmm1, %xmm1861; KNL-NEXT:    vpcmpgtq %zmm0, %zmm1, %k0862; KNL-NEXT:    kmovw %k0, %eax863; KNL-NEXT:    cmpb $-1, %al864; KNL-NEXT:    sete %al865; KNL-NEXT:    vzeroupper866; KNL-NEXT:    retq867;868; SKX-LABEL: allones_v8i64_sign:869; SKX:       # %bb.0:870; SKX-NEXT:    vpmovq2m %zmm0, %k0871; SKX-NEXT:    kortestb %k0, %k0872; SKX-NEXT:    setb %al873; SKX-NEXT:    vzeroupper874; SKX-NEXT:    retq875  %tmp = icmp slt <8 x i64> %arg, zeroinitializer876  %tmp1 = bitcast <8 x i1> %tmp to i8877  %tmp2 = icmp eq i8 %tmp1, -1878  ret i1 %tmp2879}880 881define i1 @allzeros_v8i64_sign(<8 x i64> %arg) {882; SSE-LABEL: allzeros_v8i64_sign:883; SSE:       # %bb.0:884; SSE-NEXT:    packssdw %xmm3, %xmm2885; SSE-NEXT:    packssdw %xmm1, %xmm0886; SSE-NEXT:    packssdw %xmm2, %xmm0887; SSE-NEXT:    pmovmskb %xmm0, %eax888; SSE-NEXT:    testl $43690, %eax # imm = 0xAAAA889; SSE-NEXT:    sete %al890; SSE-NEXT:    retq891;892; AVX1-LABEL: allzeros_v8i64_sign:893; AVX1:       # %bb.0:894; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2895; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3896; AVX1-NEXT:    vpor %xmm2, %xmm3, %xmm2897; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0898; AVX1-NEXT:    vpackssdw %xmm2, %xmm0, %xmm0899; AVX1-NEXT:    vtestps %xmm0, %xmm0900; AVX1-NEXT:    sete %al901; AVX1-NEXT:    vzeroupper902; AVX1-NEXT:    retq903;904; AVX2-LABEL: allzeros_v8i64_sign:905; AVX2:       # %bb.0:906; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0907; AVX2-NEXT:    vtestps %ymm0, %ymm0908; AVX2-NEXT:    sete %al909; AVX2-NEXT:    vzeroupper910; AVX2-NEXT:    retq911;912; KNL-LABEL: allzeros_v8i64_sign:913; KNL:       # %bb.0:914; KNL-NEXT:    vpxor %xmm1, %xmm1, %xmm1915; KNL-NEXT:    vpcmpgtq %zmm0, %zmm1, %k0916; KNL-NEXT:    kmovw %k0, %eax917; KNL-NEXT:    testb %al, %al918; KNL-NEXT:    sete %al919; KNL-NEXT:    vzeroupper920; KNL-NEXT:    retq921;922; SKX-LABEL: allzeros_v8i64_sign:923; SKX:       # %bb.0:924; SKX-NEXT:    vpmovq2m %zmm0, %k0925; SKX-NEXT:    kortestb %k0, %k0926; SKX-NEXT:    sete %al927; SKX-NEXT:    vzeroupper928; SKX-NEXT:    retq929  %tmp = icmp slt <8 x i64> %arg, zeroinitializer930  %tmp1 = bitcast <8 x i1> %tmp to i8931  %tmp2 = icmp eq i8 %tmp1, 0932  ret i1 %tmp2933}934 935define i1 @allones_v16i8_and1(<16 x i8> %arg) {936; SSE-LABEL: allones_v16i8_and1:937; SSE:       # %bb.0:938; SSE-NEXT:    psllw $7, %xmm0939; SSE-NEXT:    pmovmskb %xmm0, %eax940; SSE-NEXT:    cmpl $65535, %eax # imm = 0xFFFF941; SSE-NEXT:    sete %al942; SSE-NEXT:    retq943;944; AVX1OR2-LABEL: allones_v16i8_and1:945; AVX1OR2:       # %bb.0:946; AVX1OR2-NEXT:    vpsllw $7, %xmm0, %xmm0947; AVX1OR2-NEXT:    vpmovmskb %xmm0, %eax948; AVX1OR2-NEXT:    cmpl $65535, %eax # imm = 0xFFFF949; AVX1OR2-NEXT:    sete %al950; AVX1OR2-NEXT:    retq951;952; KNL-LABEL: allones_v16i8_and1:953; KNL:       # %bb.0:954; KNL-NEXT:    vpsllw $7, %xmm0, %xmm0955; KNL-NEXT:    vpmovmskb %xmm0, %eax956; KNL-NEXT:    cmpl $65535, %eax # imm = 0xFFFF957; KNL-NEXT:    sete %al958; KNL-NEXT:    retq959;960; SKX-LABEL: allones_v16i8_and1:961; SKX:       # %bb.0:962; SKX-NEXT:    vptestmb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %k0963; SKX-NEXT:    kortestw %k0, %k0964; SKX-NEXT:    setb %al965; SKX-NEXT:    retq966  %tmp = and <16 x i8> %arg, <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>967  %tmp1 = icmp ne <16 x i8> %tmp, zeroinitializer968  %tmp2 = bitcast <16 x i1> %tmp1 to i16969  %tmp3 = icmp eq i16 %tmp2, -1970  ret i1 %tmp3971}972 973define i1 @allzeros_v16i8_not(<16 x i8> %a0) {974; SSE2-LABEL: allzeros_v16i8_not:975; SSE2:       # %bb.0:976; SSE2-NEXT:    pxor %xmm1, %xmm1977; SSE2-NEXT:    pcmpeqb %xmm0, %xmm1978; SSE2-NEXT:    pmovmskb %xmm1, %eax979; SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF980; SSE2-NEXT:    setne %al981; SSE2-NEXT:    retq982;983; SSE41-LABEL: allzeros_v16i8_not:984; SSE41:       # %bb.0:985; SSE41-NEXT:    ptest %xmm0, %xmm0986; SSE41-NEXT:    setne %al987; SSE41-NEXT:    retq988;989; AVX-LABEL: allzeros_v16i8_not:990; AVX:       # %bb.0:991; AVX-NEXT:    vptest %xmm0, %xmm0992; AVX-NEXT:    setne %al993; AVX-NEXT:    retq994  %1 = icmp eq <16 x i8> %a0, zeroinitializer995  %2 = bitcast <16 x i1> %1 to i16996  %3 = icmp ne i16 %2, -1997  ret i1 %3998}999 1000define i1 @allzeros_v2i64_not(<2 x i64> %a0) {1001; SSE2-LABEL: allzeros_v2i64_not:1002; SSE2:       # %bb.0:1003; SSE2-NEXT:    pxor %xmm1, %xmm11004; SSE2-NEXT:    pcmpeqd %xmm0, %xmm11005; SSE2-NEXT:    movmskps %xmm1, %eax1006; SSE2-NEXT:    xorl $15, %eax1007; SSE2-NEXT:    setne %al1008; SSE2-NEXT:    retq1009;1010; SSE41-LABEL: allzeros_v2i64_not:1011; SSE41:       # %bb.0:1012; SSE41-NEXT:    ptest %xmm0, %xmm01013; SSE41-NEXT:    setne %al1014; SSE41-NEXT:    retq1015;1016; AVX-LABEL: allzeros_v2i64_not:1017; AVX:       # %bb.0:1018; AVX-NEXT:    vptest %xmm0, %xmm01019; AVX-NEXT:    setne %al1020; AVX-NEXT:    retq1021  %1 = icmp eq <2 x i64> %a0, zeroinitializer1022  %2 = bitcast <2 x i1> %1 to i21023  %3 = icmp ne i2 %2, -11024  ret i1 %31025}1026 1027define i1 @allzeros_v8i32_not(<8 x i32> %a0) {1028; SSE2-LABEL: allzeros_v8i32_not:1029; SSE2:       # %bb.0:1030; SSE2-NEXT:    por %xmm1, %xmm01031; SSE2-NEXT:    pxor %xmm1, %xmm11032; SSE2-NEXT:    pcmpeqd %xmm0, %xmm11033; SSE2-NEXT:    movmskps %xmm1, %eax1034; SSE2-NEXT:    xorl $15, %eax1035; SSE2-NEXT:    setne %al1036; SSE2-NEXT:    retq1037;1038; SSE41-LABEL: allzeros_v8i32_not:1039; SSE41:       # %bb.0:1040; SSE41-NEXT:    por %xmm1, %xmm01041; SSE41-NEXT:    ptest %xmm0, %xmm01042; SSE41-NEXT:    setne %al1043; SSE41-NEXT:    retq1044;1045; AVX-LABEL: allzeros_v8i32_not:1046; AVX:       # %bb.0:1047; AVX-NEXT:    vptest %ymm0, %ymm01048; AVX-NEXT:    setne %al1049; AVX-NEXT:    vzeroupper1050; AVX-NEXT:    retq1051  %1 = icmp eq <8 x i32> %a0, zeroinitializer1052  %2 = bitcast <8 x i1> %1 to i81053  %3 = icmp ne i8 %2, -11054  ret i1 %31055}1056 1057define i1 @allzeros_v8i64_not(<8 x i64> %a0) {1058; SSE2-LABEL: allzeros_v8i64_not:1059; SSE2:       # %bb.0:1060; SSE2-NEXT:    por %xmm3, %xmm11061; SSE2-NEXT:    por %xmm2, %xmm01062; SSE2-NEXT:    por %xmm1, %xmm01063; SSE2-NEXT:    pxor %xmm1, %xmm11064; SSE2-NEXT:    pcmpeqd %xmm0, %xmm11065; SSE2-NEXT:    movmskps %xmm1, %eax1066; SSE2-NEXT:    xorl $15, %eax1067; SSE2-NEXT:    setne %al1068; SSE2-NEXT:    retq1069;1070; SSE41-LABEL: allzeros_v8i64_not:1071; SSE41:       # %bb.0:1072; SSE41-NEXT:    por %xmm3, %xmm11073; SSE41-NEXT:    por %xmm2, %xmm01074; SSE41-NEXT:    por %xmm1, %xmm01075; SSE41-NEXT:    ptest %xmm0, %xmm01076; SSE41-NEXT:    setne %al1077; SSE41-NEXT:    retq1078;1079; AVX1-LABEL: allzeros_v8i64_not:1080; AVX1:       # %bb.0:1081; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01082; AVX1-NEXT:    vptest %ymm0, %ymm01083; AVX1-NEXT:    setne %al1084; AVX1-NEXT:    vzeroupper1085; AVX1-NEXT:    retq1086;1087; AVX2-LABEL: allzeros_v8i64_not:1088; AVX2:       # %bb.0:1089; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01090; AVX2-NEXT:    vptest %ymm0, %ymm01091; AVX2-NEXT:    setne %al1092; AVX2-NEXT:    vzeroupper1093; AVX2-NEXT:    retq1094;1095; AVX512-LABEL: allzeros_v8i64_not:1096; AVX512:       # %bb.0:1097; AVX512-NEXT:    vptestmd %zmm0, %zmm0, %k01098; AVX512-NEXT:    kortestw %k0, %k01099; AVX512-NEXT:    setne %al1100; AVX512-NEXT:    vzeroupper1101; AVX512-NEXT:    retq1102  %1 = icmp eq <8 x i64> %a0, zeroinitializer1103  %2 = bitcast <8 x i1> %1 to i81104  %3 = icmp ne i8 %2, -11105  ret i1 %31106}1107 1108define i1 @allzeros_v16i8_and1(<16 x i8> %arg) {1109; SSE2-LABEL: allzeros_v16i8_and1:1110; SSE2:       # %bb.0:1111; SSE2-NEXT:    psllw $7, %xmm01112; SSE2-NEXT:    pmovmskb %xmm0, %eax1113; SSE2-NEXT:    testl %eax, %eax1114; SSE2-NEXT:    sete %al1115; SSE2-NEXT:    retq1116;1117; SSE41-LABEL: allzeros_v16i8_and1:1118; SSE41:       # %bb.0:1119; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01120; SSE41-NEXT:    sete %al1121; SSE41-NEXT:    retq1122;1123; AVX1OR2-LABEL: allzeros_v16i8_and1:1124; AVX1OR2:       # %bb.0:1125; AVX1OR2-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01126; AVX1OR2-NEXT:    sete %al1127; AVX1OR2-NEXT:    retq1128;1129; KNL-LABEL: allzeros_v16i8_and1:1130; KNL:       # %bb.0:1131; KNL-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01132; KNL-NEXT:    sete %al1133; KNL-NEXT:    retq1134;1135; SKX-LABEL: allzeros_v16i8_and1:1136; SKX:       # %bb.0:1137; SKX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [72340172838076673,72340172838076673]1138; SKX-NEXT:    vptest %xmm1, %xmm01139; SKX-NEXT:    sete %al1140; SKX-NEXT:    retq1141  %tmp = and <16 x i8> %arg, <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>1142  %tmp1 = icmp ne <16 x i8> %tmp, zeroinitializer1143  %tmp2 = bitcast <16 x i1> %tmp1 to i161144  %tmp3 = icmp eq i16 %tmp2, 01145  ret i1 %tmp31146}1147 1148define i1 @allones_v32i8_and1(<32 x i8> %arg) {1149; SSE-LABEL: allones_v32i8_and1:1150; SSE:       # %bb.0:1151; SSE-NEXT:    pand %xmm1, %xmm01152; SSE-NEXT:    psllw $7, %xmm01153; SSE-NEXT:    pmovmskb %xmm0, %eax1154; SSE-NEXT:    cmpl $65535, %eax # imm = 0xFFFF1155; SSE-NEXT:    sete %al1156; SSE-NEXT:    retq1157;1158; AVX1-LABEL: allones_v32i8_and1:1159; AVX1:       # %bb.0:1160; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm11161; AVX1-NEXT:    vpand %xmm0, %xmm1, %xmm01162; AVX1-NEXT:    vpsllw $7, %xmm0, %xmm01163; AVX1-NEXT:    vpmovmskb %xmm0, %eax1164; AVX1-NEXT:    cmpl $65535, %eax # imm = 0xFFFF1165; AVX1-NEXT:    sete %al1166; AVX1-NEXT:    vzeroupper1167; AVX1-NEXT:    retq1168;1169; AVX2-LABEL: allones_v32i8_and1:1170; AVX2:       # %bb.0:1171; AVX2-NEXT:    vpsllw $7, %ymm0, %ymm01172; AVX2-NEXT:    vpmovmskb %ymm0, %eax1173; AVX2-NEXT:    cmpl $-1, %eax1174; AVX2-NEXT:    sete %al1175; AVX2-NEXT:    vzeroupper1176; AVX2-NEXT:    retq1177;1178; KNL-LABEL: allones_v32i8_and1:1179; KNL:       # %bb.0:1180; KNL-NEXT:    vpsllw $7, %ymm0, %ymm01181; KNL-NEXT:    vpmovmskb %ymm0, %eax1182; KNL-NEXT:    cmpl $-1, %eax1183; KNL-NEXT:    sete %al1184; KNL-NEXT:    vzeroupper1185; KNL-NEXT:    retq1186;1187; SKX-LABEL: allones_v32i8_and1:1188; SKX:       # %bb.0:1189; SKX-NEXT:    vptestmb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k01190; SKX-NEXT:    kortestd %k0, %k01191; SKX-NEXT:    setb %al1192; SKX-NEXT:    vzeroupper1193; SKX-NEXT:    retq1194  %tmp = and <32 x i8> %arg, <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>1195  %tmp1 = icmp ne <32 x i8> %tmp, zeroinitializer1196  %tmp2 = bitcast <32 x i1> %tmp1 to i321197  %tmp3 = icmp eq i32 %tmp2, -11198  ret i1 %tmp31199}1200 1201define i1 @allzeros_v32i8_and1(<32 x i8> %arg) {1202; SSE2-LABEL: allzeros_v32i8_and1:1203; SSE2:       # %bb.0:1204; SSE2-NEXT:    por %xmm1, %xmm01205; SSE2-NEXT:    psllw $7, %xmm01206; SSE2-NEXT:    pmovmskb %xmm0, %eax1207; SSE2-NEXT:    testl %eax, %eax1208; SSE2-NEXT:    sete %al1209; SSE2-NEXT:    retq1210;1211; SSE41-LABEL: allzeros_v32i8_and1:1212; SSE41:       # %bb.0:1213; SSE41-NEXT:    por %xmm1, %xmm01214; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01215; SSE41-NEXT:    sete %al1216; SSE41-NEXT:    retq1217;1218; AVX1-LABEL: allzeros_v32i8_and1:1219; AVX1:       # %bb.0:1220; AVX1-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm01221; AVX1-NEXT:    sete %al1222; AVX1-NEXT:    vzeroupper1223; AVX1-NEXT:    retq1224;1225; AVX2-LABEL: allzeros_v32i8_and1:1226; AVX2:       # %bb.0:1227; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [72340172838076673,72340172838076673,72340172838076673,72340172838076673]1228; AVX2-NEXT:    vptest %ymm1, %ymm01229; AVX2-NEXT:    sete %al1230; AVX2-NEXT:    vzeroupper1231; AVX2-NEXT:    retq1232;1233; AVX512-LABEL: allzeros_v32i8_and1:1234; AVX512:       # %bb.0:1235; AVX512-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [72340172838076673,72340172838076673,72340172838076673,72340172838076673]1236; AVX512-NEXT:    vptest %ymm1, %ymm01237; AVX512-NEXT:    sete %al1238; AVX512-NEXT:    vzeroupper1239; AVX512-NEXT:    retq1240  %tmp = and <32 x i8> %arg, <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>1241  %tmp1 = icmp ne <32 x i8> %tmp, zeroinitializer1242  %tmp2 = bitcast <32 x i1> %tmp1 to i321243  %tmp3 = icmp eq i32 %tmp2, 01244  ret i1 %tmp31245}1246 1247define i1 @allones_v64i8_and1(<64 x i8> %arg) {1248; SSE-LABEL: allones_v64i8_and1:1249; SSE:       # %bb.0:1250; SSE-NEXT:    pand %xmm2, %xmm01251; SSE-NEXT:    pand %xmm3, %xmm11252; SSE-NEXT:    pand %xmm0, %xmm11253; SSE-NEXT:    psllw $7, %xmm11254; SSE-NEXT:    pmovmskb %xmm1, %eax1255; SSE-NEXT:    cmpl $65535, %eax # imm = 0xFFFF1256; SSE-NEXT:    sete %al1257; SSE-NEXT:    retq1258;1259; AVX1-LABEL: allones_v64i8_and1:1260; AVX1:       # %bb.0:1261; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm21262; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm31263; AVX1-NEXT:    vpand %xmm2, %xmm3, %xmm21264; AVX1-NEXT:    vpand %xmm0, %xmm1, %xmm01265; AVX1-NEXT:    vpand %xmm0, %xmm2, %xmm01266; AVX1-NEXT:    vpsllw $7, %xmm0, %xmm01267; AVX1-NEXT:    vpmovmskb %xmm0, %eax1268; AVX1-NEXT:    cmpl $65535, %eax # imm = 0xFFFF1269; AVX1-NEXT:    sete %al1270; AVX1-NEXT:    vzeroupper1271; AVX1-NEXT:    retq1272;1273; AVX2-LABEL: allones_v64i8_and1:1274; AVX2:       # %bb.0:1275; AVX2-NEXT:    vpand %ymm0, %ymm1, %ymm01276; AVX2-NEXT:    vpsllw $7, %ymm0, %ymm01277; AVX2-NEXT:    vpmovmskb %ymm0, %eax1278; AVX2-NEXT:    cmpl $-1, %eax1279; AVX2-NEXT:    sete %al1280; AVX2-NEXT:    vzeroupper1281; AVX2-NEXT:    retq1282;1283; KNL-LABEL: allones_v64i8_and1:1284; KNL:       # %bb.0:1285; KNL-NEXT:    vextracti64x4 $1, %zmm0, %ymm11286; KNL-NEXT:    vpand %ymm0, %ymm1, %ymm01287; KNL-NEXT:    vpsllw $7, %ymm0, %ymm01288; KNL-NEXT:    vpmovmskb %ymm0, %eax1289; KNL-NEXT:    cmpl $-1, %eax1290; KNL-NEXT:    sete %al1291; KNL-NEXT:    vzeroupper1292; KNL-NEXT:    retq1293;1294; SKX-LABEL: allones_v64i8_and1:1295; SKX:       # %bb.0:1296; SKX-NEXT:    vptestmb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %k01297; SKX-NEXT:    kortestq %k0, %k01298; SKX-NEXT:    setb %al1299; SKX-NEXT:    vzeroupper1300; SKX-NEXT:    retq1301  %tmp = and <64 x i8> %arg, <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>1302  %tmp1 = icmp ne <64 x i8> %tmp, zeroinitializer1303  %tmp2 = bitcast <64 x i1> %tmp1 to i641304  %tmp3 = icmp eq i64 %tmp2, -11305  ret i1 %tmp31306}1307 1308define i1 @allzeros_v64i8_and1(<64 x i8> %arg) {1309; SSE2-LABEL: allzeros_v64i8_and1:1310; SSE2:       # %bb.0:1311; SSE2-NEXT:    por %xmm3, %xmm11312; SSE2-NEXT:    por %xmm2, %xmm01313; SSE2-NEXT:    por %xmm1, %xmm01314; SSE2-NEXT:    psllw $7, %xmm01315; SSE2-NEXT:    pmovmskb %xmm0, %eax1316; SSE2-NEXT:    testl %eax, %eax1317; SSE2-NEXT:    sete %al1318; SSE2-NEXT:    retq1319;1320; SSE41-LABEL: allzeros_v64i8_and1:1321; SSE41:       # %bb.0:1322; SSE41-NEXT:    por %xmm3, %xmm11323; SSE41-NEXT:    por %xmm2, %xmm01324; SSE41-NEXT:    por %xmm1, %xmm01325; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01326; SSE41-NEXT:    sete %al1327; SSE41-NEXT:    retq1328;1329; AVX1-LABEL: allzeros_v64i8_and1:1330; AVX1:       # %bb.0:1331; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01332; AVX1-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm01333; AVX1-NEXT:    sete %al1334; AVX1-NEXT:    vzeroupper1335; AVX1-NEXT:    retq1336;1337; AVX2-LABEL: allzeros_v64i8_and1:1338; AVX2:       # %bb.0:1339; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01340; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [72340172838076673,72340172838076673,72340172838076673,72340172838076673]1341; AVX2-NEXT:    vptest %ymm1, %ymm01342; AVX2-NEXT:    sete %al1343; AVX2-NEXT:    vzeroupper1344; AVX2-NEXT:    retq1345;1346; AVX512-LABEL: allzeros_v64i8_and1:1347; AVX512:       # %bb.0:1348; AVX512-NEXT:    vptestmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %k01349; AVX512-NEXT:    kortestw %k0, %k01350; AVX512-NEXT:    sete %al1351; AVX512-NEXT:    vzeroupper1352; AVX512-NEXT:    retq1353  %tmp = and <64 x i8> %arg, <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>1354  %tmp1 = icmp ne <64 x i8> %tmp, zeroinitializer1355  %tmp2 = bitcast <64 x i1> %tmp1 to i641356  %tmp3 = icmp eq i64 %tmp2, 01357  ret i1 %tmp31358}1359 1360define i1 @allones_v8i16_and1(<8 x i16> %arg) {1361; SSE-LABEL: allones_v8i16_and1:1362; SSE:       # %bb.0:1363; SSE-NEXT:    psllw $15, %xmm01364; SSE-NEXT:    packsswb %xmm0, %xmm01365; SSE-NEXT:    pmovmskb %xmm0, %eax1366; SSE-NEXT:    cmpb $-1, %al1367; SSE-NEXT:    sete %al1368; SSE-NEXT:    retq1369;1370; AVX1OR2-LABEL: allones_v8i16_and1:1371; AVX1OR2:       # %bb.0:1372; AVX1OR2-NEXT:    vpsllw $15, %xmm0, %xmm01373; AVX1OR2-NEXT:    vpacksswb %xmm0, %xmm0, %xmm01374; AVX1OR2-NEXT:    vpmovmskb %xmm0, %eax1375; AVX1OR2-NEXT:    cmpb $-1, %al1376; AVX1OR2-NEXT:    sete %al1377; AVX1OR2-NEXT:    retq1378;1379; KNL-LABEL: allones_v8i16_and1:1380; KNL:       # %bb.0:1381; KNL-NEXT:    vpsllw $15, %xmm0, %xmm01382; KNL-NEXT:    vpsraw $15, %xmm0, %xmm01383; KNL-NEXT:    vpmovsxwq %xmm0, %zmm01384; KNL-NEXT:    vptestmq %zmm0, %zmm0, %k01385; KNL-NEXT:    kmovw %k0, %eax1386; KNL-NEXT:    cmpb $-1, %al1387; KNL-NEXT:    sete %al1388; KNL-NEXT:    vzeroupper1389; KNL-NEXT:    retq1390;1391; SKX-LABEL: allones_v8i16_and1:1392; SKX:       # %bb.0:1393; SKX-NEXT:    vptestmw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %k01394; SKX-NEXT:    kortestb %k0, %k01395; SKX-NEXT:    setb %al1396; SKX-NEXT:    retq1397  %tmp = and <8 x i16> %arg, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>1398  %tmp1 = icmp ne <8 x i16> %tmp, zeroinitializer1399  %tmp2 = bitcast <8 x i1> %tmp1 to i81400  %tmp3 = icmp eq i8 %tmp2, -11401  ret i1 %tmp31402}1403 1404define i1 @allzeros_v8i16_and1(<8 x i16> %arg) {1405; SSE2-LABEL: allzeros_v8i16_and1:1406; SSE2:       # %bb.0:1407; SSE2-NEXT:    psllw $7, %xmm01408; SSE2-NEXT:    pmovmskb %xmm0, %eax1409; SSE2-NEXT:    testl $21845, %eax # imm = 0x55551410; SSE2-NEXT:    sete %al1411; SSE2-NEXT:    retq1412;1413; SSE41-LABEL: allzeros_v8i16_and1:1414; SSE41:       # %bb.0:1415; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01416; SSE41-NEXT:    sete %al1417; SSE41-NEXT:    retq1418;1419; AVX1OR2-LABEL: allzeros_v8i16_and1:1420; AVX1OR2:       # %bb.0:1421; AVX1OR2-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01422; AVX1OR2-NEXT:    sete %al1423; AVX1OR2-NEXT:    retq1424;1425; KNL-LABEL: allzeros_v8i16_and1:1426; KNL:       # %bb.0:1427; KNL-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01428; KNL-NEXT:    sete %al1429; KNL-NEXT:    retq1430;1431; SKX-LABEL: allzeros_v8i16_and1:1432; SKX:       # %bb.0:1433; SKX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [281479271743489,281479271743489]1434; SKX-NEXT:    vptest %xmm1, %xmm01435; SKX-NEXT:    sete %al1436; SKX-NEXT:    retq1437  %tmp = and <8 x i16> %arg, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>1438  %tmp1 = icmp ne <8 x i16> %tmp, zeroinitializer1439  %tmp2 = bitcast <8 x i1> %tmp1 to i81440  %tmp3 = icmp eq i8 %tmp2, 01441  ret i1 %tmp31442}1443 1444define i1 @allones_v16i16_and1(<16 x i16> %arg) {1445; SSE-LABEL: allones_v16i16_and1:1446; SSE:       # %bb.0:1447; SSE-NEXT:    psllw $15, %xmm11448; SSE-NEXT:    psllw $15, %xmm01449; SSE-NEXT:    packsswb %xmm1, %xmm01450; SSE-NEXT:    pmovmskb %xmm0, %eax1451; SSE-NEXT:    cmpl $65535, %eax # imm = 0xFFFF1452; SSE-NEXT:    sete %al1453; SSE-NEXT:    retq1454;1455; AVX1-LABEL: allones_v16i16_and1:1456; AVX1:       # %bb.0:1457; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm11458; AVX1-NEXT:    vpsllw $15, %xmm1, %xmm11459; AVX1-NEXT:    vpsllw $15, %xmm0, %xmm01460; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm01461; AVX1-NEXT:    vpmovmskb %xmm0, %eax1462; AVX1-NEXT:    cmpl $65535, %eax # imm = 0xFFFF1463; AVX1-NEXT:    sete %al1464; AVX1-NEXT:    vzeroupper1465; AVX1-NEXT:    retq1466;1467; AVX2-LABEL: allones_v16i16_and1:1468; AVX2:       # %bb.0:1469; AVX2-NEXT:    vpsllw $15, %ymm0, %ymm01470; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm11471; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm01472; AVX2-NEXT:    vpmovmskb %xmm0, %eax1473; AVX2-NEXT:    cmpl $65535, %eax # imm = 0xFFFF1474; AVX2-NEXT:    sete %al1475; AVX2-NEXT:    vzeroupper1476; AVX2-NEXT:    retq1477;1478; KNL-LABEL: allones_v16i16_and1:1479; KNL:       # %bb.0:1480; KNL-NEXT:    vpsllw $15, %ymm0, %ymm01481; KNL-NEXT:    vpsraw $15, %ymm0, %ymm01482; KNL-NEXT:    vpmovsxwd %ymm0, %zmm01483; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k01484; KNL-NEXT:    kortestw %k0, %k01485; KNL-NEXT:    setb %al1486; KNL-NEXT:    vzeroupper1487; KNL-NEXT:    retq1488;1489; SKX-LABEL: allones_v16i16_and1:1490; SKX:       # %bb.0:1491; SKX-NEXT:    vptestmw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k01492; SKX-NEXT:    kortestw %k0, %k01493; SKX-NEXT:    setb %al1494; SKX-NEXT:    vzeroupper1495; SKX-NEXT:    retq1496  %tmp = and <16 x i16> %arg, <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>1497  %tmp1 = icmp ne <16 x i16> %tmp, zeroinitializer1498  %tmp2 = bitcast <16 x i1> %tmp1 to i161499  %tmp3 = icmp eq i16 %tmp2, -11500  ret i1 %tmp31501}1502 1503define i1 @allones_v32i16_and1(<32 x i16> %arg) {1504; SSE-LABEL: allones_v32i16_and1:1505; SSE:       # %bb.0:1506; SSE-NEXT:    pand %xmm3, %xmm11507; SSE-NEXT:    psllw $15, %xmm11508; SSE-NEXT:    pand %xmm2, %xmm01509; SSE-NEXT:    psllw $15, %xmm01510; SSE-NEXT:    packsswb %xmm1, %xmm01511; SSE-NEXT:    pmovmskb %xmm0, %eax1512; SSE-NEXT:    cmpl $65535, %eax # imm = 0xFFFF1513; SSE-NEXT:    sete %al1514; SSE-NEXT:    retq1515;1516; AVX1-LABEL: allones_v32i16_and1:1517; AVX1:       # %bb.0:1518; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm21519; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm31520; AVX1-NEXT:    vpand %xmm2, %xmm3, %xmm21521; AVX1-NEXT:    vpsllw $15, %xmm2, %xmm21522; AVX1-NEXT:    vpand %xmm0, %xmm1, %xmm01523; AVX1-NEXT:    vpsllw $15, %xmm0, %xmm01524; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm01525; AVX1-NEXT:    vpmovmskb %xmm0, %eax1526; AVX1-NEXT:    cmpl $65535, %eax # imm = 0xFFFF1527; AVX1-NEXT:    sete %al1528; AVX1-NEXT:    vzeroupper1529; AVX1-NEXT:    retq1530;1531; AVX2-LABEL: allones_v32i16_and1:1532; AVX2:       # %bb.0:1533; AVX2-NEXT:    vpsllw $15, %ymm1, %ymm11534; AVX2-NEXT:    vpsllw $15, %ymm0, %ymm01535; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm01536; AVX2-NEXT:    vpmovmskb %ymm0, %eax1537; AVX2-NEXT:    cmpl $-1, %eax1538; AVX2-NEXT:    sete %al1539; AVX2-NEXT:    vzeroupper1540; AVX2-NEXT:    retq1541;1542; KNL-LABEL: allones_v32i16_and1:1543; KNL:       # %bb.0:1544; KNL-NEXT:    vpsllw $15, %ymm0, %ymm11545; KNL-NEXT:    vpsraw $15, %ymm1, %ymm11546; KNL-NEXT:    vpmovsxwd %ymm1, %zmm11547; KNL-NEXT:    vptestmd %zmm1, %zmm1, %k01548; KNL-NEXT:    kmovw %k0, %eax1549; KNL-NEXT:    vextracti64x4 $1, %zmm0, %ymm01550; KNL-NEXT:    vpsllw $15, %ymm0, %ymm01551; KNL-NEXT:    vpsraw $15, %ymm0, %ymm01552; KNL-NEXT:    vpmovsxwd %ymm0, %zmm01553; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k01554; KNL-NEXT:    kmovw %k0, %ecx1555; KNL-NEXT:    andl %eax, %ecx1556; KNL-NEXT:    cmpl $65535, %ecx # imm = 0xFFFF1557; KNL-NEXT:    sete %al1558; KNL-NEXT:    vzeroupper1559; KNL-NEXT:    retq1560;1561; SKX-LABEL: allones_v32i16_and1:1562; SKX:       # %bb.0:1563; SKX-NEXT:    vptestmw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %k01564; SKX-NEXT:    kortestd %k0, %k01565; SKX-NEXT:    setb %al1566; SKX-NEXT:    vzeroupper1567; SKX-NEXT:    retq1568  %tmp = and <32 x i16> %arg, <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>1569  %tmp1 = icmp ne <32 x i16> %tmp, zeroinitializer1570  %tmp2 = bitcast <32 x i1> %tmp1 to i321571  %tmp3 = icmp eq i32 %tmp2, -11572  ret i1 %tmp31573}1574 1575define i1 @allzeros_v32i16_and1(<32 x i16> %arg) {1576; SSE2-LABEL: allzeros_v32i16_and1:1577; SSE2:       # %bb.0:1578; SSE2-NEXT:    por %xmm3, %xmm11579; SSE2-NEXT:    por %xmm2, %xmm01580; SSE2-NEXT:    por %xmm1, %xmm01581; SSE2-NEXT:    psllw $7, %xmm01582; SSE2-NEXT:    pmovmskb %xmm0, %eax1583; SSE2-NEXT:    testl $21845, %eax # imm = 0x55551584; SSE2-NEXT:    sete %al1585; SSE2-NEXT:    retq1586;1587; SSE41-LABEL: allzeros_v32i16_and1:1588; SSE41:       # %bb.0:1589; SSE41-NEXT:    por %xmm3, %xmm11590; SSE41-NEXT:    por %xmm2, %xmm01591; SSE41-NEXT:    por %xmm1, %xmm01592; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01593; SSE41-NEXT:    sete %al1594; SSE41-NEXT:    retq1595;1596; AVX1-LABEL: allzeros_v32i16_and1:1597; AVX1:       # %bb.0:1598; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01599; AVX1-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm01600; AVX1-NEXT:    sete %al1601; AVX1-NEXT:    vzeroupper1602; AVX1-NEXT:    retq1603;1604; AVX2-LABEL: allzeros_v32i16_and1:1605; AVX2:       # %bb.0:1606; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01607; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [281479271743489,281479271743489,281479271743489,281479271743489]1608; AVX2-NEXT:    vptest %ymm1, %ymm01609; AVX2-NEXT:    sete %al1610; AVX2-NEXT:    vzeroupper1611; AVX2-NEXT:    retq1612;1613; AVX512-LABEL: allzeros_v32i16_and1:1614; AVX512:       # %bb.0:1615; AVX512-NEXT:    vptestmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %k01616; AVX512-NEXT:    kortestw %k0, %k01617; AVX512-NEXT:    sete %al1618; AVX512-NEXT:    vzeroupper1619; AVX512-NEXT:    retq1620  %tmp = and <32 x i16> %arg, <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>1621  %tmp1 = icmp ne <32 x i16> %tmp, zeroinitializer1622  %tmp2 = bitcast <32 x i1> %tmp1 to i321623  %tmp3 = icmp eq i32 %tmp2, 01624  ret i1 %tmp31625}1626 1627define i1 @allzeros_v16i16_and1(<16 x i16> %arg) {1628; SSE2-LABEL: allzeros_v16i16_and1:1629; SSE2:       # %bb.0:1630; SSE2-NEXT:    por %xmm1, %xmm01631; SSE2-NEXT:    psllw $7, %xmm01632; SSE2-NEXT:    pmovmskb %xmm0, %eax1633; SSE2-NEXT:    testl $21845, %eax # imm = 0x55551634; SSE2-NEXT:    sete %al1635; SSE2-NEXT:    retq1636;1637; SSE41-LABEL: allzeros_v16i16_and1:1638; SSE41:       # %bb.0:1639; SSE41-NEXT:    por %xmm1, %xmm01640; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01641; SSE41-NEXT:    sete %al1642; SSE41-NEXT:    retq1643;1644; AVX1-LABEL: allzeros_v16i16_and1:1645; AVX1:       # %bb.0:1646; AVX1-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm01647; AVX1-NEXT:    sete %al1648; AVX1-NEXT:    vzeroupper1649; AVX1-NEXT:    retq1650;1651; AVX2-LABEL: allzeros_v16i16_and1:1652; AVX2:       # %bb.0:1653; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [281479271743489,281479271743489,281479271743489,281479271743489]1654; AVX2-NEXT:    vptest %ymm1, %ymm01655; AVX2-NEXT:    sete %al1656; AVX2-NEXT:    vzeroupper1657; AVX2-NEXT:    retq1658;1659; AVX512-LABEL: allzeros_v16i16_and1:1660; AVX512:       # %bb.0:1661; AVX512-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [281479271743489,281479271743489,281479271743489,281479271743489]1662; AVX512-NEXT:    vptest %ymm1, %ymm01663; AVX512-NEXT:    sete %al1664; AVX512-NEXT:    vzeroupper1665; AVX512-NEXT:    retq1666  %tmp = and <16 x i16> %arg, <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>1667  %tmp1 = icmp ne <16 x i16> %tmp, zeroinitializer1668  %tmp2 = bitcast <16 x i1> %tmp1 to i161669  %tmp3 = icmp eq i16 %tmp2, 01670  ret i1 %tmp31671}1672 1673define i1 @allones_v4i32_and1(<4 x i32> %arg) {1674; SSE-LABEL: allones_v4i32_and1:1675; SSE:       # %bb.0:1676; SSE-NEXT:    pslld $31, %xmm01677; SSE-NEXT:    movmskps %xmm0, %eax1678; SSE-NEXT:    cmpl $15, %eax1679; SSE-NEXT:    sete %al1680; SSE-NEXT:    retq1681;1682; AVX1OR2-LABEL: allones_v4i32_and1:1683; AVX1OR2:       # %bb.0:1684; AVX1OR2-NEXT:    vpslld $31, %xmm0, %xmm01685; AVX1OR2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11686; AVX1OR2-NEXT:    vtestps %xmm1, %xmm01687; AVX1OR2-NEXT:    setb %al1688; AVX1OR2-NEXT:    retq1689;1690; KNL-LABEL: allones_v4i32_and1:1691; KNL:       # %bb.0:1692; KNL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01693; KNL-NEXT:    vptestnmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %k01694; KNL-NEXT:    kmovw %k0, %eax1695; KNL-NEXT:    testb $15, %al1696; KNL-NEXT:    sete %al1697; KNL-NEXT:    vzeroupper1698; KNL-NEXT:    retq1699;1700; SKX-LABEL: allones_v4i32_and1:1701; SKX:       # %bb.0:1702; SKX-NEXT:    vptestmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %k01703; SKX-NEXT:    kmovd %k0, %eax1704; SKX-NEXT:    cmpb $15, %al1705; SKX-NEXT:    sete %al1706; SKX-NEXT:    retq1707  %tmp = and <4 x i32> %arg, <i32 1, i32 1, i32 1, i32 1>1708  %tmp1 = icmp ne <4 x i32> %tmp, zeroinitializer1709  %tmp2 = bitcast <4 x i1> %tmp1 to i41710  %tmp3 = icmp eq i4 %tmp2, -11711  ret i1 %tmp31712}1713 1714define i1 @allzeros_v4i32_and1(<4 x i32> %arg) {1715; SSE2-LABEL: allzeros_v4i32_and1:1716; SSE2:       # %bb.0:1717; SSE2-NEXT:    pslld $31, %xmm01718; SSE2-NEXT:    movmskps %xmm0, %eax1719; SSE2-NEXT:    testl %eax, %eax1720; SSE2-NEXT:    sete %al1721; SSE2-NEXT:    retq1722;1723; SSE41-LABEL: allzeros_v4i32_and1:1724; SSE41:       # %bb.0:1725; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01726; SSE41-NEXT:    sete %al1727; SSE41-NEXT:    retq1728;1729; AVX1OR2-LABEL: allzeros_v4i32_and1:1730; AVX1OR2:       # %bb.0:1731; AVX1OR2-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01732; AVX1OR2-NEXT:    sete %al1733; AVX1OR2-NEXT:    retq1734;1735; KNL-LABEL: allzeros_v4i32_and1:1736; KNL:       # %bb.0:1737; KNL-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01738; KNL-NEXT:    sete %al1739; KNL-NEXT:    retq1740;1741; SKX-LABEL: allzeros_v4i32_and1:1742; SKX:       # %bb.0:1743; SKX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [4294967297,4294967297]1744; SKX-NEXT:    vptest %xmm1, %xmm01745; SKX-NEXT:    sete %al1746; SKX-NEXT:    retq1747  %tmp = and <4 x i32> %arg, <i32 1, i32 1, i32 1, i32 1>1748  %tmp1 = icmp ne <4 x i32> %tmp, zeroinitializer1749  %tmp2 = bitcast <4 x i1> %tmp1 to i41750  %tmp3 = icmp eq i4 %tmp2, 01751  ret i1 %tmp31752}1753 1754define i1 @allones_v8i32_and1(<8 x i32> %arg) {1755; SSE-LABEL: allones_v8i32_and1:1756; SSE:       # %bb.0:1757; SSE-NEXT:    pslld $31, %xmm11758; SSE-NEXT:    pslld $31, %xmm01759; SSE-NEXT:    packssdw %xmm1, %xmm01760; SSE-NEXT:    packsswb %xmm0, %xmm01761; SSE-NEXT:    pmovmskb %xmm0, %eax1762; SSE-NEXT:    cmpb $-1, %al1763; SSE-NEXT:    sete %al1764; SSE-NEXT:    retq1765;1766; AVX1-LABEL: allones_v8i32_and1:1767; AVX1:       # %bb.0:1768; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm11769; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm01770; AVX1-NEXT:    vpslld $31, %xmm0, %xmm01771; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11772; AVX1-NEXT:    vtestps %xmm1, %xmm01773; AVX1-NEXT:    setb %al1774; AVX1-NEXT:    vzeroupper1775; AVX1-NEXT:    retq1776;1777; AVX2-LABEL: allones_v8i32_and1:1778; AVX2:       # %bb.0:1779; AVX2-NEXT:    vpslld $31, %ymm0, %ymm01780; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm11781; AVX2-NEXT:    vtestps %ymm1, %ymm01782; AVX2-NEXT:    setb %al1783; AVX2-NEXT:    vzeroupper1784; AVX2-NEXT:    retq1785;1786; KNL-LABEL: allones_v8i32_and1:1787; KNL:       # %bb.0:1788; KNL-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01789; KNL-NEXT:    vptestmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %k01790; KNL-NEXT:    kmovw %k0, %eax1791; KNL-NEXT:    cmpb $-1, %al1792; KNL-NEXT:    sete %al1793; KNL-NEXT:    vzeroupper1794; KNL-NEXT:    retq1795;1796; SKX-LABEL: allones_v8i32_and1:1797; SKX:       # %bb.0:1798; SKX-NEXT:    vptestmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k01799; SKX-NEXT:    kortestb %k0, %k01800; SKX-NEXT:    setb %al1801; SKX-NEXT:    vzeroupper1802; SKX-NEXT:    retq1803  %tmp = and <8 x i32> %arg, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>1804  %tmp1 = icmp ne <8 x i32> %tmp, zeroinitializer1805  %tmp2 = bitcast <8 x i1> %tmp1 to i81806  %tmp3 = icmp eq i8 %tmp2, -11807  ret i1 %tmp31808}1809 1810define i1 @allzeros_v8i32_and1(<8 x i32> %arg) {1811; SSE2-LABEL: allzeros_v8i32_and1:1812; SSE2:       # %bb.0:1813; SSE2-NEXT:    por %xmm1, %xmm01814; SSE2-NEXT:    pslld $31, %xmm01815; SSE2-NEXT:    movmskps %xmm0, %eax1816; SSE2-NEXT:    testl %eax, %eax1817; SSE2-NEXT:    sete %al1818; SSE2-NEXT:    retq1819;1820; SSE41-LABEL: allzeros_v8i32_and1:1821; SSE41:       # %bb.0:1822; SSE41-NEXT:    por %xmm1, %xmm01823; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01824; SSE41-NEXT:    sete %al1825; SSE41-NEXT:    retq1826;1827; AVX1-LABEL: allzeros_v8i32_and1:1828; AVX1:       # %bb.0:1829; AVX1-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm01830; AVX1-NEXT:    sete %al1831; AVX1-NEXT:    vzeroupper1832; AVX1-NEXT:    retq1833;1834; AVX2-LABEL: allzeros_v8i32_and1:1835; AVX2:       # %bb.0:1836; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4294967297,4294967297,4294967297,4294967297]1837; AVX2-NEXT:    vptest %ymm1, %ymm01838; AVX2-NEXT:    sete %al1839; AVX2-NEXT:    vzeroupper1840; AVX2-NEXT:    retq1841;1842; AVX512-LABEL: allzeros_v8i32_and1:1843; AVX512:       # %bb.0:1844; AVX512-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4294967297,4294967297,4294967297,4294967297]1845; AVX512-NEXT:    vptest %ymm1, %ymm01846; AVX512-NEXT:    sete %al1847; AVX512-NEXT:    vzeroupper1848; AVX512-NEXT:    retq1849  %tmp = and <8 x i32> %arg, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>1850  %tmp1 = icmp ne <8 x i32> %tmp, zeroinitializer1851  %tmp2 = bitcast <8 x i1> %tmp1 to i81852  %tmp3 = icmp eq i8 %tmp2, 01853  ret i1 %tmp31854}1855 1856define i1 @allones_v16i32_and1(<16 x i32> %arg) {1857; SSE-LABEL: allones_v16i32_and1:1858; SSE:       # %bb.0:1859; SSE-NEXT:    pslld $31, %xmm31860; SSE-NEXT:    pslld $31, %xmm21861; SSE-NEXT:    packssdw %xmm3, %xmm21862; SSE-NEXT:    pslld $31, %xmm11863; SSE-NEXT:    pslld $31, %xmm01864; SSE-NEXT:    packssdw %xmm1, %xmm01865; SSE-NEXT:    packsswb %xmm2, %xmm01866; SSE-NEXT:    pmovmskb %xmm0, %eax1867; SSE-NEXT:    cmpl $65535, %eax # imm = 0xFFFF1868; SSE-NEXT:    sete %al1869; SSE-NEXT:    retq1870;1871; AVX1-LABEL: allones_v16i32_and1:1872; AVX1:       # %bb.0:1873; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm21874; AVX1-NEXT:    vpslld $31, %xmm2, %xmm21875; AVX1-NEXT:    vpslld $31, %xmm1, %xmm11876; AVX1-NEXT:    vpackssdw %xmm2, %xmm1, %xmm11877; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm21878; AVX1-NEXT:    vpslld $31, %xmm2, %xmm21879; AVX1-NEXT:    vpslld $31, %xmm0, %xmm01880; AVX1-NEXT:    vpackssdw %xmm2, %xmm0, %xmm01881; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm01882; AVX1-NEXT:    vpmovmskb %xmm0, %eax1883; AVX1-NEXT:    cmpl $65535, %eax # imm = 0xFFFF1884; AVX1-NEXT:    sete %al1885; AVX1-NEXT:    vzeroupper1886; AVX1-NEXT:    retq1887;1888; AVX2-LABEL: allones_v16i32_and1:1889; AVX2:       # %bb.0:1890; AVX2-NEXT:    vpslld $31, %ymm1, %ymm11891; AVX2-NEXT:    vpsrad $31, %ymm1, %ymm11892; AVX2-NEXT:    vpslld $31, %ymm0, %ymm01893; AVX2-NEXT:    vpsrad $31, %ymm0, %ymm01894; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm01895; AVX2-NEXT:    vpmovmskb %ymm0, %eax1896; AVX2-NEXT:    cmpl $-1, %eax1897; AVX2-NEXT:    sete %al1898; AVX2-NEXT:    vzeroupper1899; AVX2-NEXT:    retq1900;1901; AVX512-LABEL: allones_v16i32_and1:1902; AVX512:       # %bb.0:1903; AVX512-NEXT:    vptestmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %k01904; AVX512-NEXT:    kortestw %k0, %k01905; AVX512-NEXT:    setb %al1906; AVX512-NEXT:    vzeroupper1907; AVX512-NEXT:    retq1908  %tmp = and <16 x i32> %arg, <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>1909  %tmp1 = icmp ne <16 x i32> %tmp, zeroinitializer1910  %tmp2 = bitcast <16 x i1> %tmp1 to i161911  %tmp3 = icmp eq i16 %tmp2, -11912  ret i1 %tmp31913}1914 1915define i1 @allzeros_v16i32_and1(<16 x i32> %arg) {1916; SSE2-LABEL: allzeros_v16i32_and1:1917; SSE2:       # %bb.0:1918; SSE2-NEXT:    por %xmm3, %xmm11919; SSE2-NEXT:    por %xmm2, %xmm01920; SSE2-NEXT:    por %xmm1, %xmm01921; SSE2-NEXT:    pslld $31, %xmm01922; SSE2-NEXT:    movmskps %xmm0, %eax1923; SSE2-NEXT:    testl %eax, %eax1924; SSE2-NEXT:    sete %al1925; SSE2-NEXT:    retq1926;1927; SSE41-LABEL: allzeros_v16i32_and1:1928; SSE41:       # %bb.0:1929; SSE41-NEXT:    por %xmm3, %xmm11930; SSE41-NEXT:    por %xmm2, %xmm01931; SSE41-NEXT:    por %xmm1, %xmm01932; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01933; SSE41-NEXT:    sete %al1934; SSE41-NEXT:    retq1935;1936; AVX1-LABEL: allzeros_v16i32_and1:1937; AVX1:       # %bb.0:1938; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01939; AVX1-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm01940; AVX1-NEXT:    sete %al1941; AVX1-NEXT:    vzeroupper1942; AVX1-NEXT:    retq1943;1944; AVX2-LABEL: allzeros_v16i32_and1:1945; AVX2:       # %bb.0:1946; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01947; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4294967297,4294967297,4294967297,4294967297]1948; AVX2-NEXT:    vptest %ymm1, %ymm01949; AVX2-NEXT:    sete %al1950; AVX2-NEXT:    vzeroupper1951; AVX2-NEXT:    retq1952;1953; AVX512-LABEL: allzeros_v16i32_and1:1954; AVX512:       # %bb.0:1955; AVX512-NEXT:    vptestmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %k01956; AVX512-NEXT:    kortestw %k0, %k01957; AVX512-NEXT:    sete %al1958; AVX512-NEXT:    vzeroupper1959; AVX512-NEXT:    retq1960  %tmp = and <16 x i32> %arg, <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>1961  %tmp1 = icmp ne <16 x i32> %tmp, zeroinitializer1962  %tmp2 = bitcast <16 x i1> %tmp1 to i161963  %tmp3 = icmp eq i16 %tmp2, 01964  ret i1 %tmp31965}1966 1967define i1 @allones_v2i64_and1(<2 x i64> %arg) {1968; SSE-LABEL: allones_v2i64_and1:1969; SSE:       # %bb.0:1970; SSE-NEXT:    psllq $63, %xmm01971; SSE-NEXT:    movmskpd %xmm0, %eax1972; SSE-NEXT:    cmpl $3, %eax1973; SSE-NEXT:    sete %al1974; SSE-NEXT:    retq1975;1976; AVX1OR2-LABEL: allones_v2i64_and1:1977; AVX1OR2:       # %bb.0:1978; AVX1OR2-NEXT:    vpsllq $63, %xmm0, %xmm01979; AVX1OR2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11980; AVX1OR2-NEXT:    vtestpd %xmm1, %xmm01981; AVX1OR2-NEXT:    setb %al1982; AVX1OR2-NEXT:    retq1983;1984; KNL-LABEL: allones_v2i64_and1:1985; KNL:       # %bb.0:1986; KNL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01987; KNL-NEXT:    vpmovsxbq {{.*#+}} xmm1 = [1,1]1988; KNL-NEXT:    vptestnmq %zmm1, %zmm0, %k01989; KNL-NEXT:    kmovw %k0, %eax1990; KNL-NEXT:    testb $3, %al1991; KNL-NEXT:    sete %al1992; KNL-NEXT:    vzeroupper1993; KNL-NEXT:    retq1994;1995; SKX-LABEL: allones_v2i64_and1:1996; SKX:       # %bb.0:1997; SKX-NEXT:    vptestmq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %k01998; SKX-NEXT:    kmovd %k0, %eax1999; SKX-NEXT:    cmpb $3, %al2000; SKX-NEXT:    sete %al2001; SKX-NEXT:    retq2002  %tmp = and <2 x i64> %arg, <i64 1, i64 1>2003  %tmp1 = icmp ne <2 x i64> %tmp, zeroinitializer2004  %tmp2 = bitcast <2 x i1> %tmp1 to i22005  %tmp3 = icmp eq i2 %tmp2, -12006  ret i1 %tmp32007}2008 2009define i1 @allzeros_v2i64_and1(<2 x i64> %arg) {2010; SSE2-LABEL: allzeros_v2i64_and1:2011; SSE2:       # %bb.0:2012; SSE2-NEXT:    pslld $31, %xmm02013; SSE2-NEXT:    movmskps %xmm0, %eax2014; SSE2-NEXT:    testb $5, %al2015; SSE2-NEXT:    sete %al2016; SSE2-NEXT:    retq2017;2018; SSE41-LABEL: allzeros_v2i64_and1:2019; SSE41:       # %bb.0:2020; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02021; SSE41-NEXT:    sete %al2022; SSE41-NEXT:    retq2023;2024; AVX1OR2-LABEL: allzeros_v2i64_and1:2025; AVX1OR2:       # %bb.0:2026; AVX1OR2-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02027; AVX1OR2-NEXT:    sete %al2028; AVX1OR2-NEXT:    retq2029;2030; KNL-LABEL: allzeros_v2i64_and1:2031; KNL:       # %bb.0:2032; KNL-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02033; KNL-NEXT:    sete %al2034; KNL-NEXT:    retq2035;2036; SKX-LABEL: allzeros_v2i64_and1:2037; SKX:       # %bb.0:2038; SKX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [1,1]2039; SKX-NEXT:    vptest %xmm1, %xmm02040; SKX-NEXT:    sete %al2041; SKX-NEXT:    retq2042  %tmp = and <2 x i64> %arg, <i64 1, i64 1>2043  %tmp1 = icmp ne <2 x i64> %tmp, zeroinitializer2044  %tmp2 = bitcast <2 x i1> %tmp1 to i22045  %tmp3 = icmp eq i2 %tmp2, 02046  ret i1 %tmp32047}2048 2049define i1 @allones_v4i64_and1(<4 x i64> %arg) {2050; SSE-LABEL: allones_v4i64_and1:2051; SSE:       # %bb.0:2052; SSE-NEXT:    psllq $63, %xmm12053; SSE-NEXT:    psllq $63, %xmm02054; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,3],xmm1[1,3]2055; SSE-NEXT:    movmskps %xmm0, %eax2056; SSE-NEXT:    cmpl $15, %eax2057; SSE-NEXT:    sete %al2058; SSE-NEXT:    retq2059;2060; AVX1-LABEL: allones_v4i64_and1:2061; AVX1:       # %bb.0:2062; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm12063; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm02064; AVX1-NEXT:    vpsllq $63, %xmm0, %xmm02065; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm12066; AVX1-NEXT:    vtestpd %xmm1, %xmm02067; AVX1-NEXT:    setb %al2068; AVX1-NEXT:    vzeroupper2069; AVX1-NEXT:    retq2070;2071; AVX2-LABEL: allones_v4i64_and1:2072; AVX2:       # %bb.0:2073; AVX2-NEXT:    vpsllq $63, %ymm0, %ymm02074; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm12075; AVX2-NEXT:    vtestpd %ymm1, %ymm02076; AVX2-NEXT:    setb %al2077; AVX2-NEXT:    vzeroupper2078; AVX2-NEXT:    retq2079;2080; KNL-LABEL: allones_v4i64_and1:2081; KNL:       # %bb.0:2082; KNL-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm02083; KNL-NEXT:    vptestnmq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %k02084; KNL-NEXT:    kmovw %k0, %eax2085; KNL-NEXT:    testb $15, %al2086; KNL-NEXT:    sete %al2087; KNL-NEXT:    vzeroupper2088; KNL-NEXT:    retq2089;2090; SKX-LABEL: allones_v4i64_and1:2091; SKX:       # %bb.0:2092; SKX-NEXT:    vptestmq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k02093; SKX-NEXT:    kmovd %k0, %eax2094; SKX-NEXT:    cmpb $15, %al2095; SKX-NEXT:    sete %al2096; SKX-NEXT:    vzeroupper2097; SKX-NEXT:    retq2098  %tmp = and <4 x i64> %arg, <i64 1, i64 1, i64 1, i64 1>2099  %tmp1 = icmp ne <4 x i64> %tmp, zeroinitializer2100  %tmp2 = bitcast <4 x i1> %tmp1 to i42101  %tmp3 = icmp eq i4 %tmp2, -12102  ret i1 %tmp32103}2104 2105define i1 @allzeros_v4i64_and1(<4 x i64> %arg) {2106; SSE2-LABEL: allzeros_v4i64_and1:2107; SSE2:       # %bb.0:2108; SSE2-NEXT:    por %xmm1, %xmm02109; SSE2-NEXT:    pslld $31, %xmm02110; SSE2-NEXT:    movmskps %xmm0, %eax2111; SSE2-NEXT:    testb $5, %al2112; SSE2-NEXT:    sete %al2113; SSE2-NEXT:    retq2114;2115; SSE41-LABEL: allzeros_v4i64_and1:2116; SSE41:       # %bb.0:2117; SSE41-NEXT:    por %xmm1, %xmm02118; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02119; SSE41-NEXT:    sete %al2120; SSE41-NEXT:    retq2121;2122; AVX1-LABEL: allzeros_v4i64_and1:2123; AVX1:       # %bb.0:2124; AVX1-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm02125; AVX1-NEXT:    sete %al2126; AVX1-NEXT:    vzeroupper2127; AVX1-NEXT:    retq2128;2129; AVX2-LABEL: allzeros_v4i64_and1:2130; AVX2:       # %bb.0:2131; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [1,1,1,1]2132; AVX2-NEXT:    vptest %ymm1, %ymm02133; AVX2-NEXT:    sete %al2134; AVX2-NEXT:    vzeroupper2135; AVX2-NEXT:    retq2136;2137; AVX512-LABEL: allzeros_v4i64_and1:2138; AVX512:       # %bb.0:2139; AVX512-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [1,1,1,1]2140; AVX512-NEXT:    vptest %ymm1, %ymm02141; AVX512-NEXT:    sete %al2142; AVX512-NEXT:    vzeroupper2143; AVX512-NEXT:    retq2144  %tmp = and <4 x i64> %arg, <i64 1, i64 1, i64 1, i64 1>2145  %tmp1 = icmp ne <4 x i64> %tmp, zeroinitializer2146  %tmp2 = bitcast <4 x i1> %tmp1 to i42147  %tmp3 = icmp eq i4 %tmp2, 02148  ret i1 %tmp32149}2150 2151define i1 @allones_v8i64_and1(<8 x i64> %arg) {2152; SSE-LABEL: allones_v8i64_and1:2153; SSE:       # %bb.0:2154; SSE-NEXT:    psllq $63, %xmm32155; SSE-NEXT:    psllq $63, %xmm22156; SSE-NEXT:    packssdw %xmm3, %xmm22157; SSE-NEXT:    psllq $63, %xmm12158; SSE-NEXT:    psllq $63, %xmm02159; SSE-NEXT:    packssdw %xmm1, %xmm02160; SSE-NEXT:    packssdw %xmm2, %xmm02161; SSE-NEXT:    packsswb %xmm0, %xmm02162; SSE-NEXT:    pmovmskb %xmm0, %eax2163; SSE-NEXT:    cmpb $-1, %al2164; SSE-NEXT:    sete %al2165; SSE-NEXT:    retq2166;2167; AVX1-LABEL: allones_v8i64_and1:2168; AVX1:       # %bb.0:2169; AVX1-NEXT:    vpsllq $63, %xmm1, %xmm22170; AVX1-NEXT:    vpsllq $63, %xmm0, %xmm32171; AVX1-NEXT:    vpand %xmm2, %xmm3, %xmm22172; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm12173; AVX1-NEXT:    vpsllq $63, %xmm1, %xmm12174; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02175; AVX1-NEXT:    vpsllq $63, %xmm0, %xmm02176; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm02177; AVX1-NEXT:    vpackssdw %xmm0, %xmm2, %xmm02178; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm12179; AVX1-NEXT:    vtestps %xmm1, %xmm02180; AVX1-NEXT:    setb %al2181; AVX1-NEXT:    vzeroupper2182; AVX1-NEXT:    retq2183;2184; AVX2-LABEL: allones_v8i64_and1:2185; AVX2:       # %bb.0:2186; AVX2-NEXT:    vpsllq $63, %ymm1, %ymm12187; AVX2-NEXT:    vpsllq $63, %ymm0, %ymm02188; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm02189; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm12190; AVX2-NEXT:    vtestps %ymm1, %ymm02191; AVX2-NEXT:    setb %al2192; AVX2-NEXT:    vzeroupper2193; AVX2-NEXT:    retq2194;2195; KNL-LABEL: allones_v8i64_and1:2196; KNL:       # %bb.0:2197; KNL-NEXT:    vptestmq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %k02198; KNL-NEXT:    kmovw %k0, %eax2199; KNL-NEXT:    cmpb $-1, %al2200; KNL-NEXT:    sete %al2201; KNL-NEXT:    vzeroupper2202; KNL-NEXT:    retq2203;2204; SKX-LABEL: allones_v8i64_and1:2205; SKX:       # %bb.0:2206; SKX-NEXT:    vptestmq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %k02207; SKX-NEXT:    kortestb %k0, %k02208; SKX-NEXT:    setb %al2209; SKX-NEXT:    vzeroupper2210; SKX-NEXT:    retq2211  %tmp = and <8 x i64> %arg, <i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1>2212  %tmp1 = icmp ne <8 x i64> %tmp, zeroinitializer2213  %tmp2 = bitcast <8 x i1> %tmp1 to i82214  %tmp3 = icmp eq i8 %tmp2, -12215  ret i1 %tmp32216}2217 2218define i1 @allzeros_v8i64_and1(<8 x i64> %arg) {2219; SSE2-LABEL: allzeros_v8i64_and1:2220; SSE2:       # %bb.0:2221; SSE2-NEXT:    por %xmm3, %xmm12222; SSE2-NEXT:    por %xmm2, %xmm02223; SSE2-NEXT:    por %xmm1, %xmm02224; SSE2-NEXT:    pslld $31, %xmm02225; SSE2-NEXT:    movmskps %xmm0, %eax2226; SSE2-NEXT:    testb $5, %al2227; SSE2-NEXT:    sete %al2228; SSE2-NEXT:    retq2229;2230; SSE41-LABEL: allzeros_v8i64_and1:2231; SSE41:       # %bb.0:2232; SSE41-NEXT:    por %xmm3, %xmm12233; SSE41-NEXT:    por %xmm2, %xmm02234; SSE41-NEXT:    por %xmm1, %xmm02235; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02236; SSE41-NEXT:    sete %al2237; SSE41-NEXT:    retq2238;2239; AVX1-LABEL: allzeros_v8i64_and1:2240; AVX1:       # %bb.0:2241; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm02242; AVX1-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm02243; AVX1-NEXT:    sete %al2244; AVX1-NEXT:    vzeroupper2245; AVX1-NEXT:    retq2246;2247; AVX2-LABEL: allzeros_v8i64_and1:2248; AVX2:       # %bb.0:2249; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm02250; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [1,1,1,1]2251; AVX2-NEXT:    vptest %ymm1, %ymm02252; AVX2-NEXT:    sete %al2253; AVX2-NEXT:    vzeroupper2254; AVX2-NEXT:    retq2255;2256; AVX512-LABEL: allzeros_v8i64_and1:2257; AVX512:       # %bb.0:2258; AVX512-NEXT:    vpbroadcastq {{.*#+}} zmm1 = [1,1,1,1,1,1,1,1]2259; AVX512-NEXT:    vptestmd %zmm1, %zmm0, %k02260; AVX512-NEXT:    kortestw %k0, %k02261; AVX512-NEXT:    sete %al2262; AVX512-NEXT:    vzeroupper2263; AVX512-NEXT:    retq2264  %tmp = and <8 x i64> %arg, <i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1>2265  %tmp1 = icmp ne <8 x i64> %tmp, zeroinitializer2266  %tmp2 = bitcast <8 x i1> %tmp1 to i82267  %tmp3 = icmp eq i8 %tmp2, 02268  ret i1 %tmp32269}2270 2271define i1 @allones_v16i8_and4(<16 x i8> %arg) {2272; SSE-LABEL: allones_v16i8_and4:2273; SSE:       # %bb.0:2274; SSE-NEXT:    psllw $5, %xmm02275; SSE-NEXT:    pmovmskb %xmm0, %eax2276; SSE-NEXT:    cmpl $65535, %eax # imm = 0xFFFF2277; SSE-NEXT:    sete %al2278; SSE-NEXT:    retq2279;2280; AVX1OR2-LABEL: allones_v16i8_and4:2281; AVX1OR2:       # %bb.0:2282; AVX1OR2-NEXT:    vpsllw $5, %xmm0, %xmm02283; AVX1OR2-NEXT:    vpmovmskb %xmm0, %eax2284; AVX1OR2-NEXT:    cmpl $65535, %eax # imm = 0xFFFF2285; AVX1OR2-NEXT:    sete %al2286; AVX1OR2-NEXT:    retq2287;2288; KNL-LABEL: allones_v16i8_and4:2289; KNL:       # %bb.0:2290; KNL-NEXT:    vpsllw $5, %xmm0, %xmm02291; KNL-NEXT:    vpmovmskb %xmm0, %eax2292; KNL-NEXT:    cmpl $65535, %eax # imm = 0xFFFF2293; KNL-NEXT:    sete %al2294; KNL-NEXT:    retq2295;2296; SKX-LABEL: allones_v16i8_and4:2297; SKX:       # %bb.0:2298; SKX-NEXT:    vptestmb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %k02299; SKX-NEXT:    kortestw %k0, %k02300; SKX-NEXT:    setb %al2301; SKX-NEXT:    retq2302  %tmp = and <16 x i8> %arg, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>2303  %tmp1 = icmp ne <16 x i8> %tmp, zeroinitializer2304  %tmp2 = bitcast <16 x i1> %tmp1 to i162305  %tmp3 = icmp eq i16 %tmp2, -12306  ret i1 %tmp32307}2308 2309define i1 @allzeros_v16i8_and4(<16 x i8> %arg) {2310; SSE2-LABEL: allzeros_v16i8_and4:2311; SSE2:       # %bb.0:2312; SSE2-NEXT:    psllw $5, %xmm02313; SSE2-NEXT:    pmovmskb %xmm0, %eax2314; SSE2-NEXT:    testl %eax, %eax2315; SSE2-NEXT:    sete %al2316; SSE2-NEXT:    retq2317;2318; SSE41-LABEL: allzeros_v16i8_and4:2319; SSE41:       # %bb.0:2320; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02321; SSE41-NEXT:    sete %al2322; SSE41-NEXT:    retq2323;2324; AVX1OR2-LABEL: allzeros_v16i8_and4:2325; AVX1OR2:       # %bb.0:2326; AVX1OR2-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02327; AVX1OR2-NEXT:    sete %al2328; AVX1OR2-NEXT:    retq2329;2330; KNL-LABEL: allzeros_v16i8_and4:2331; KNL:       # %bb.0:2332; KNL-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02333; KNL-NEXT:    sete %al2334; KNL-NEXT:    retq2335;2336; SKX-LABEL: allzeros_v16i8_and4:2337; SKX:       # %bb.0:2338; SKX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [289360691352306692,289360691352306692]2339; SKX-NEXT:    vptest %xmm1, %xmm02340; SKX-NEXT:    sete %al2341; SKX-NEXT:    retq2342  %tmp = and <16 x i8> %arg, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>2343  %tmp1 = icmp ne <16 x i8> %tmp, zeroinitializer2344  %tmp2 = bitcast <16 x i1> %tmp1 to i162345  %tmp3 = icmp eq i16 %tmp2, 02346  ret i1 %tmp32347}2348 2349define i1 @allones_v32i8_and4(<32 x i8> %arg) {2350; SSE-LABEL: allones_v32i8_and4:2351; SSE:       # %bb.0:2352; SSE-NEXT:    pand %xmm1, %xmm02353; SSE-NEXT:    psllw $5, %xmm02354; SSE-NEXT:    pmovmskb %xmm0, %eax2355; SSE-NEXT:    cmpl $65535, %eax # imm = 0xFFFF2356; SSE-NEXT:    sete %al2357; SSE-NEXT:    retq2358;2359; AVX1-LABEL: allones_v32i8_and4:2360; AVX1:       # %bb.0:2361; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm12362; AVX1-NEXT:    vpand %xmm0, %xmm1, %xmm02363; AVX1-NEXT:    vpsllw $5, %xmm0, %xmm02364; AVX1-NEXT:    vpmovmskb %xmm0, %eax2365; AVX1-NEXT:    cmpl $65535, %eax # imm = 0xFFFF2366; AVX1-NEXT:    sete %al2367; AVX1-NEXT:    vzeroupper2368; AVX1-NEXT:    retq2369;2370; AVX2-LABEL: allones_v32i8_and4:2371; AVX2:       # %bb.0:2372; AVX2-NEXT:    vpsllw $5, %ymm0, %ymm02373; AVX2-NEXT:    vpmovmskb %ymm0, %eax2374; AVX2-NEXT:    cmpl $-1, %eax2375; AVX2-NEXT:    sete %al2376; AVX2-NEXT:    vzeroupper2377; AVX2-NEXT:    retq2378;2379; KNL-LABEL: allones_v32i8_and4:2380; KNL:       # %bb.0:2381; KNL-NEXT:    vpsllw $5, %ymm0, %ymm02382; KNL-NEXT:    vpmovmskb %ymm0, %eax2383; KNL-NEXT:    cmpl $-1, %eax2384; KNL-NEXT:    sete %al2385; KNL-NEXT:    vzeroupper2386; KNL-NEXT:    retq2387;2388; SKX-LABEL: allones_v32i8_and4:2389; SKX:       # %bb.0:2390; SKX-NEXT:    vptestmb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k02391; SKX-NEXT:    kortestd %k0, %k02392; SKX-NEXT:    setb %al2393; SKX-NEXT:    vzeroupper2394; SKX-NEXT:    retq2395  %tmp = and <32 x i8> %arg, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>2396  %tmp1 = icmp ne <32 x i8> %tmp, zeroinitializer2397  %tmp2 = bitcast <32 x i1> %tmp1 to i322398  %tmp3 = icmp eq i32 %tmp2, -12399  ret i1 %tmp32400}2401 2402define i1 @allzeros_v32i8_and4(<32 x i8> %arg) {2403; SSE2-LABEL: allzeros_v32i8_and4:2404; SSE2:       # %bb.0:2405; SSE2-NEXT:    por %xmm1, %xmm02406; SSE2-NEXT:    psllw $5, %xmm02407; SSE2-NEXT:    pmovmskb %xmm0, %eax2408; SSE2-NEXT:    testl %eax, %eax2409; SSE2-NEXT:    sete %al2410; SSE2-NEXT:    retq2411;2412; SSE41-LABEL: allzeros_v32i8_and4:2413; SSE41:       # %bb.0:2414; SSE41-NEXT:    por %xmm1, %xmm02415; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02416; SSE41-NEXT:    sete %al2417; SSE41-NEXT:    retq2418;2419; AVX1-LABEL: allzeros_v32i8_and4:2420; AVX1:       # %bb.0:2421; AVX1-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm02422; AVX1-NEXT:    sete %al2423; AVX1-NEXT:    vzeroupper2424; AVX1-NEXT:    retq2425;2426; AVX2-LABEL: allzeros_v32i8_and4:2427; AVX2:       # %bb.0:2428; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [289360691352306692,289360691352306692,289360691352306692,289360691352306692]2429; AVX2-NEXT:    vptest %ymm1, %ymm02430; AVX2-NEXT:    sete %al2431; AVX2-NEXT:    vzeroupper2432; AVX2-NEXT:    retq2433;2434; AVX512-LABEL: allzeros_v32i8_and4:2435; AVX512:       # %bb.0:2436; AVX512-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [289360691352306692,289360691352306692,289360691352306692,289360691352306692]2437; AVX512-NEXT:    vptest %ymm1, %ymm02438; AVX512-NEXT:    sete %al2439; AVX512-NEXT:    vzeroupper2440; AVX512-NEXT:    retq2441  %tmp = and <32 x i8> %arg, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>2442  %tmp1 = icmp ne <32 x i8> %tmp, zeroinitializer2443  %tmp2 = bitcast <32 x i1> %tmp1 to i322444  %tmp3 = icmp eq i32 %tmp2, 02445  ret i1 %tmp32446}2447 2448define i1 @allones_v64i8_and4(<64 x i8> %arg) {2449; SSE-LABEL: allones_v64i8_and4:2450; SSE:       # %bb.0:2451; SSE-NEXT:    pand %xmm2, %xmm02452; SSE-NEXT:    pand %xmm3, %xmm12453; SSE-NEXT:    pand %xmm0, %xmm12454; SSE-NEXT:    psllw $5, %xmm12455; SSE-NEXT:    pmovmskb %xmm1, %eax2456; SSE-NEXT:    cmpl $65535, %eax # imm = 0xFFFF2457; SSE-NEXT:    sete %al2458; SSE-NEXT:    retq2459;2460; AVX1-LABEL: allones_v64i8_and4:2461; AVX1:       # %bb.0:2462; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm22463; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm32464; AVX1-NEXT:    vpand %xmm2, %xmm3, %xmm22465; AVX1-NEXT:    vpand %xmm0, %xmm1, %xmm02466; AVX1-NEXT:    vpand %xmm0, %xmm2, %xmm02467; AVX1-NEXT:    vpsllw $5, %xmm0, %xmm02468; AVX1-NEXT:    vpmovmskb %xmm0, %eax2469; AVX1-NEXT:    cmpl $65535, %eax # imm = 0xFFFF2470; AVX1-NEXT:    sete %al2471; AVX1-NEXT:    vzeroupper2472; AVX1-NEXT:    retq2473;2474; AVX2-LABEL: allones_v64i8_and4:2475; AVX2:       # %bb.0:2476; AVX2-NEXT:    vpand %ymm0, %ymm1, %ymm02477; AVX2-NEXT:    vpsllw $5, %ymm0, %ymm02478; AVX2-NEXT:    vpmovmskb %ymm0, %eax2479; AVX2-NEXT:    cmpl $-1, %eax2480; AVX2-NEXT:    sete %al2481; AVX2-NEXT:    vzeroupper2482; AVX2-NEXT:    retq2483;2484; KNL-LABEL: allones_v64i8_and4:2485; KNL:       # %bb.0:2486; KNL-NEXT:    vextracti64x4 $1, %zmm0, %ymm12487; KNL-NEXT:    vpand %ymm0, %ymm1, %ymm02488; KNL-NEXT:    vpsllw $5, %ymm0, %ymm02489; KNL-NEXT:    vpmovmskb %ymm0, %eax2490; KNL-NEXT:    cmpl $-1, %eax2491; KNL-NEXT:    sete %al2492; KNL-NEXT:    vzeroupper2493; KNL-NEXT:    retq2494;2495; SKX-LABEL: allones_v64i8_and4:2496; SKX:       # %bb.0:2497; SKX-NEXT:    vptestmb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %k02498; SKX-NEXT:    kortestq %k0, %k02499; SKX-NEXT:    setb %al2500; SKX-NEXT:    vzeroupper2501; SKX-NEXT:    retq2502  %tmp = and <64 x i8> %arg, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>2503  %tmp1 = icmp ne <64 x i8> %tmp, zeroinitializer2504  %tmp2 = bitcast <64 x i1> %tmp1 to i642505  %tmp3 = icmp eq i64 %tmp2, -12506  ret i1 %tmp32507}2508 2509define i1 @allzeros_v64i8_and4(<64 x i8> %arg) {2510; SSE2-LABEL: allzeros_v64i8_and4:2511; SSE2:       # %bb.0:2512; SSE2-NEXT:    por %xmm3, %xmm12513; SSE2-NEXT:    por %xmm2, %xmm02514; SSE2-NEXT:    por %xmm1, %xmm02515; SSE2-NEXT:    psllw $5, %xmm02516; SSE2-NEXT:    pmovmskb %xmm0, %eax2517; SSE2-NEXT:    testl %eax, %eax2518; SSE2-NEXT:    sete %al2519; SSE2-NEXT:    retq2520;2521; SSE41-LABEL: allzeros_v64i8_and4:2522; SSE41:       # %bb.0:2523; SSE41-NEXT:    por %xmm3, %xmm12524; SSE41-NEXT:    por %xmm2, %xmm02525; SSE41-NEXT:    por %xmm1, %xmm02526; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02527; SSE41-NEXT:    sete %al2528; SSE41-NEXT:    retq2529;2530; AVX1-LABEL: allzeros_v64i8_and4:2531; AVX1:       # %bb.0:2532; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm02533; AVX1-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm02534; AVX1-NEXT:    sete %al2535; AVX1-NEXT:    vzeroupper2536; AVX1-NEXT:    retq2537;2538; AVX2-LABEL: allzeros_v64i8_and4:2539; AVX2:       # %bb.0:2540; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm02541; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [289360691352306692,289360691352306692,289360691352306692,289360691352306692]2542; AVX2-NEXT:    vptest %ymm1, %ymm02543; AVX2-NEXT:    sete %al2544; AVX2-NEXT:    vzeroupper2545; AVX2-NEXT:    retq2546;2547; AVX512-LABEL: allzeros_v64i8_and4:2548; AVX512:       # %bb.0:2549; AVX512-NEXT:    vptestmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %k02550; AVX512-NEXT:    kortestw %k0, %k02551; AVX512-NEXT:    sete %al2552; AVX512-NEXT:    vzeroupper2553; AVX512-NEXT:    retq2554  %tmp = and <64 x i8> %arg, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>2555  %tmp1 = icmp ne <64 x i8> %tmp, zeroinitializer2556  %tmp2 = bitcast <64 x i1> %tmp1 to i642557  %tmp3 = icmp eq i64 %tmp2, 02558  ret i1 %tmp32559}2560 2561define i1 @allones_v8i16_and4(<8 x i16> %arg) {2562; SSE-LABEL: allones_v8i16_and4:2563; SSE:       # %bb.0:2564; SSE-NEXT:    psllw $13, %xmm02565; SSE-NEXT:    packsswb %xmm0, %xmm02566; SSE-NEXT:    pmovmskb %xmm0, %eax2567; SSE-NEXT:    cmpb $-1, %al2568; SSE-NEXT:    sete %al2569; SSE-NEXT:    retq2570;2571; AVX1OR2-LABEL: allones_v8i16_and4:2572; AVX1OR2:       # %bb.0:2573; AVX1OR2-NEXT:    vpsllw $13, %xmm0, %xmm02574; AVX1OR2-NEXT:    vpacksswb %xmm0, %xmm0, %xmm02575; AVX1OR2-NEXT:    vpmovmskb %xmm0, %eax2576; AVX1OR2-NEXT:    cmpb $-1, %al2577; AVX1OR2-NEXT:    sete %al2578; AVX1OR2-NEXT:    retq2579;2580; KNL-LABEL: allones_v8i16_and4:2581; KNL:       # %bb.0:2582; KNL-NEXT:    vpsllw $13, %xmm0, %xmm02583; KNL-NEXT:    vpsraw $15, %xmm0, %xmm02584; KNL-NEXT:    vpmovsxwq %xmm0, %zmm02585; KNL-NEXT:    vptestmq %zmm0, %zmm0, %k02586; KNL-NEXT:    kmovw %k0, %eax2587; KNL-NEXT:    cmpb $-1, %al2588; KNL-NEXT:    sete %al2589; KNL-NEXT:    vzeroupper2590; KNL-NEXT:    retq2591;2592; SKX-LABEL: allones_v8i16_and4:2593; SKX:       # %bb.0:2594; SKX-NEXT:    vptestmw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %k02595; SKX-NEXT:    kortestb %k0, %k02596; SKX-NEXT:    setb %al2597; SKX-NEXT:    retq2598  %tmp = and <8 x i16> %arg, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>2599  %tmp1 = icmp ne <8 x i16> %tmp, zeroinitializer2600  %tmp2 = bitcast <8 x i1> %tmp1 to i82601  %tmp3 = icmp eq i8 %tmp2, -12602  ret i1 %tmp32603}2604 2605define i1 @allzeros_v8i16_and4(<8 x i16> %arg) {2606; SSE2-LABEL: allzeros_v8i16_and4:2607; SSE2:       # %bb.0:2608; SSE2-NEXT:    psllw $5, %xmm02609; SSE2-NEXT:    pmovmskb %xmm0, %eax2610; SSE2-NEXT:    testl $21845, %eax # imm = 0x55552611; SSE2-NEXT:    sete %al2612; SSE2-NEXT:    retq2613;2614; SSE41-LABEL: allzeros_v8i16_and4:2615; SSE41:       # %bb.0:2616; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02617; SSE41-NEXT:    sete %al2618; SSE41-NEXT:    retq2619;2620; AVX1OR2-LABEL: allzeros_v8i16_and4:2621; AVX1OR2:       # %bb.0:2622; AVX1OR2-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02623; AVX1OR2-NEXT:    sete %al2624; AVX1OR2-NEXT:    retq2625;2626; KNL-LABEL: allzeros_v8i16_and4:2627; KNL:       # %bb.0:2628; KNL-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02629; KNL-NEXT:    sete %al2630; KNL-NEXT:    retq2631;2632; SKX-LABEL: allzeros_v8i16_and4:2633; SKX:       # %bb.0:2634; SKX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [1125917086973956,1125917086973956]2635; SKX-NEXT:    vptest %xmm1, %xmm02636; SKX-NEXT:    sete %al2637; SKX-NEXT:    retq2638  %tmp = and <8 x i16> %arg, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>2639  %tmp1 = icmp ne <8 x i16> %tmp, zeroinitializer2640  %tmp2 = bitcast <8 x i1> %tmp1 to i82641  %tmp3 = icmp eq i8 %tmp2, 02642  ret i1 %tmp32643}2644 2645define i1 @allones_v16i16_and4(<16 x i16> %arg) {2646; SSE-LABEL: allones_v16i16_and4:2647; SSE:       # %bb.0:2648; SSE-NEXT:    psllw $13, %xmm12649; SSE-NEXT:    psllw $13, %xmm02650; SSE-NEXT:    packsswb %xmm1, %xmm02651; SSE-NEXT:    pmovmskb %xmm0, %eax2652; SSE-NEXT:    cmpl $65535, %eax # imm = 0xFFFF2653; SSE-NEXT:    sete %al2654; SSE-NEXT:    retq2655;2656; AVX1-LABEL: allones_v16i16_and4:2657; AVX1:       # %bb.0:2658; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm12659; AVX1-NEXT:    vpsllw $13, %xmm1, %xmm12660; AVX1-NEXT:    vpsllw $13, %xmm0, %xmm02661; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm02662; AVX1-NEXT:    vpmovmskb %xmm0, %eax2663; AVX1-NEXT:    cmpl $65535, %eax # imm = 0xFFFF2664; AVX1-NEXT:    sete %al2665; AVX1-NEXT:    vzeroupper2666; AVX1-NEXT:    retq2667;2668; AVX2-LABEL: allones_v16i16_and4:2669; AVX2:       # %bb.0:2670; AVX2-NEXT:    vpsllw $13, %ymm0, %ymm02671; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm12672; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm02673; AVX2-NEXT:    vpmovmskb %xmm0, %eax2674; AVX2-NEXT:    cmpl $65535, %eax # imm = 0xFFFF2675; AVX2-NEXT:    sete %al2676; AVX2-NEXT:    vzeroupper2677; AVX2-NEXT:    retq2678;2679; KNL-LABEL: allones_v16i16_and4:2680; KNL:       # %bb.0:2681; KNL-NEXT:    vpsllw $13, %ymm0, %ymm02682; KNL-NEXT:    vpsraw $15, %ymm0, %ymm02683; KNL-NEXT:    vpmovsxwd %ymm0, %zmm02684; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k02685; KNL-NEXT:    kortestw %k0, %k02686; KNL-NEXT:    setb %al2687; KNL-NEXT:    vzeroupper2688; KNL-NEXT:    retq2689;2690; SKX-LABEL: allones_v16i16_and4:2691; SKX:       # %bb.0:2692; SKX-NEXT:    vptestmw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k02693; SKX-NEXT:    kortestw %k0, %k02694; SKX-NEXT:    setb %al2695; SKX-NEXT:    vzeroupper2696; SKX-NEXT:    retq2697  %tmp = and <16 x i16> %arg, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>2698  %tmp1 = icmp ne <16 x i16> %tmp, zeroinitializer2699  %tmp2 = bitcast <16 x i1> %tmp1 to i162700  %tmp3 = icmp eq i16 %tmp2, -12701  ret i1 %tmp32702}2703 2704define i1 @allones_v32i16_and4(<32 x i16> %arg) {2705; SSE-LABEL: allones_v32i16_and4:2706; SSE:       # %bb.0:2707; SSE-NEXT:    pand %xmm3, %xmm12708; SSE-NEXT:    psllw $13, %xmm12709; SSE-NEXT:    pand %xmm2, %xmm02710; SSE-NEXT:    psllw $13, %xmm02711; SSE-NEXT:    packsswb %xmm1, %xmm02712; SSE-NEXT:    pmovmskb %xmm0, %eax2713; SSE-NEXT:    cmpl $65535, %eax # imm = 0xFFFF2714; SSE-NEXT:    sete %al2715; SSE-NEXT:    retq2716;2717; AVX1-LABEL: allones_v32i16_and4:2718; AVX1:       # %bb.0:2719; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm22720; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm32721; AVX1-NEXT:    vpand %xmm2, %xmm3, %xmm22722; AVX1-NEXT:    vpsllw $13, %xmm2, %xmm22723; AVX1-NEXT:    vpand %xmm0, %xmm1, %xmm02724; AVX1-NEXT:    vpsllw $13, %xmm0, %xmm02725; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm02726; AVX1-NEXT:    vpmovmskb %xmm0, %eax2727; AVX1-NEXT:    cmpl $65535, %eax # imm = 0xFFFF2728; AVX1-NEXT:    sete %al2729; AVX1-NEXT:    vzeroupper2730; AVX1-NEXT:    retq2731;2732; AVX2-LABEL: allones_v32i16_and4:2733; AVX2:       # %bb.0:2734; AVX2-NEXT:    vpsllw $13, %ymm1, %ymm12735; AVX2-NEXT:    vpsllw $13, %ymm0, %ymm02736; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm02737; AVX2-NEXT:    vpmovmskb %ymm0, %eax2738; AVX2-NEXT:    cmpl $-1, %eax2739; AVX2-NEXT:    sete %al2740; AVX2-NEXT:    vzeroupper2741; AVX2-NEXT:    retq2742;2743; KNL-LABEL: allones_v32i16_and4:2744; KNL:       # %bb.0:2745; KNL-NEXT:    vpsllw $13, %ymm0, %ymm12746; KNL-NEXT:    vpsraw $15, %ymm1, %ymm12747; KNL-NEXT:    vpmovsxwd %ymm1, %zmm12748; KNL-NEXT:    vptestmd %zmm1, %zmm1, %k02749; KNL-NEXT:    kmovw %k0, %eax2750; KNL-NEXT:    vextracti64x4 $1, %zmm0, %ymm02751; KNL-NEXT:    vpsllw $13, %ymm0, %ymm02752; KNL-NEXT:    vpsraw $15, %ymm0, %ymm02753; KNL-NEXT:    vpmovsxwd %ymm0, %zmm02754; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k02755; KNL-NEXT:    kmovw %k0, %ecx2756; KNL-NEXT:    andl %eax, %ecx2757; KNL-NEXT:    cmpl $65535, %ecx # imm = 0xFFFF2758; KNL-NEXT:    sete %al2759; KNL-NEXT:    vzeroupper2760; KNL-NEXT:    retq2761;2762; SKX-LABEL: allones_v32i16_and4:2763; SKX:       # %bb.0:2764; SKX-NEXT:    vptestmw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %k02765; SKX-NEXT:    kortestd %k0, %k02766; SKX-NEXT:    setb %al2767; SKX-NEXT:    vzeroupper2768; SKX-NEXT:    retq2769  %tmp = and <32 x i16> %arg, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>2770  %tmp1 = icmp ne <32 x i16> %tmp, zeroinitializer2771  %tmp2 = bitcast <32 x i1> %tmp1 to i322772  %tmp3 = icmp eq i32 %tmp2, -12773  ret i1 %tmp32774}2775 2776define i1 @allzeros_v32i16_and4(<32 x i16> %arg) {2777; SSE2-LABEL: allzeros_v32i16_and4:2778; SSE2:       # %bb.0:2779; SSE2-NEXT:    por %xmm3, %xmm12780; SSE2-NEXT:    por %xmm2, %xmm02781; SSE2-NEXT:    por %xmm1, %xmm02782; SSE2-NEXT:    psllw $5, %xmm02783; SSE2-NEXT:    pmovmskb %xmm0, %eax2784; SSE2-NEXT:    testl $21845, %eax # imm = 0x55552785; SSE2-NEXT:    sete %al2786; SSE2-NEXT:    retq2787;2788; SSE41-LABEL: allzeros_v32i16_and4:2789; SSE41:       # %bb.0:2790; SSE41-NEXT:    por %xmm3, %xmm12791; SSE41-NEXT:    por %xmm2, %xmm02792; SSE41-NEXT:    por %xmm1, %xmm02793; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02794; SSE41-NEXT:    sete %al2795; SSE41-NEXT:    retq2796;2797; AVX1-LABEL: allzeros_v32i16_and4:2798; AVX1:       # %bb.0:2799; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm02800; AVX1-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm02801; AVX1-NEXT:    sete %al2802; AVX1-NEXT:    vzeroupper2803; AVX1-NEXT:    retq2804;2805; AVX2-LABEL: allzeros_v32i16_and4:2806; AVX2:       # %bb.0:2807; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm02808; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [1125917086973956,1125917086973956,1125917086973956,1125917086973956]2809; AVX2-NEXT:    vptest %ymm1, %ymm02810; AVX2-NEXT:    sete %al2811; AVX2-NEXT:    vzeroupper2812; AVX2-NEXT:    retq2813;2814; AVX512-LABEL: allzeros_v32i16_and4:2815; AVX512:       # %bb.0:2816; AVX512-NEXT:    vptestmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %k02817; AVX512-NEXT:    kortestw %k0, %k02818; AVX512-NEXT:    sete %al2819; AVX512-NEXT:    vzeroupper2820; AVX512-NEXT:    retq2821  %tmp = and <32 x i16> %arg, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>2822  %tmp1 = icmp ne <32 x i16> %tmp, zeroinitializer2823  %tmp2 = bitcast <32 x i1> %tmp1 to i322824  %tmp3 = icmp eq i32 %tmp2, 02825  ret i1 %tmp32826}2827 2828define i1 @allzeros_v16i16_and4(<16 x i16> %arg) {2829; SSE2-LABEL: allzeros_v16i16_and4:2830; SSE2:       # %bb.0:2831; SSE2-NEXT:    por %xmm1, %xmm02832; SSE2-NEXT:    psllw $5, %xmm02833; SSE2-NEXT:    pmovmskb %xmm0, %eax2834; SSE2-NEXT:    testl $21845, %eax # imm = 0x55552835; SSE2-NEXT:    sete %al2836; SSE2-NEXT:    retq2837;2838; SSE41-LABEL: allzeros_v16i16_and4:2839; SSE41:       # %bb.0:2840; SSE41-NEXT:    por %xmm1, %xmm02841; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02842; SSE41-NEXT:    sete %al2843; SSE41-NEXT:    retq2844;2845; AVX1-LABEL: allzeros_v16i16_and4:2846; AVX1:       # %bb.0:2847; AVX1-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm02848; AVX1-NEXT:    sete %al2849; AVX1-NEXT:    vzeroupper2850; AVX1-NEXT:    retq2851;2852; AVX2-LABEL: allzeros_v16i16_and4:2853; AVX2:       # %bb.0:2854; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [1125917086973956,1125917086973956,1125917086973956,1125917086973956]2855; AVX2-NEXT:    vptest %ymm1, %ymm02856; AVX2-NEXT:    sete %al2857; AVX2-NEXT:    vzeroupper2858; AVX2-NEXT:    retq2859;2860; AVX512-LABEL: allzeros_v16i16_and4:2861; AVX512:       # %bb.0:2862; AVX512-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [1125917086973956,1125917086973956,1125917086973956,1125917086973956]2863; AVX512-NEXT:    vptest %ymm1, %ymm02864; AVX512-NEXT:    sete %al2865; AVX512-NEXT:    vzeroupper2866; AVX512-NEXT:    retq2867  %tmp = and <16 x i16> %arg, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>2868  %tmp1 = icmp ne <16 x i16> %tmp, zeroinitializer2869  %tmp2 = bitcast <16 x i1> %tmp1 to i162870  %tmp3 = icmp eq i16 %tmp2, 02871  ret i1 %tmp32872}2873 2874define i1 @allones_v4i32_and4(<4 x i32> %arg) {2875; SSE-LABEL: allones_v4i32_and4:2876; SSE:       # %bb.0:2877; SSE-NEXT:    pslld $29, %xmm02878; SSE-NEXT:    movmskps %xmm0, %eax2879; SSE-NEXT:    cmpl $15, %eax2880; SSE-NEXT:    sete %al2881; SSE-NEXT:    retq2882;2883; AVX1OR2-LABEL: allones_v4i32_and4:2884; AVX1OR2:       # %bb.0:2885; AVX1OR2-NEXT:    vpslld $29, %xmm0, %xmm02886; AVX1OR2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm12887; AVX1OR2-NEXT:    vtestps %xmm1, %xmm02888; AVX1OR2-NEXT:    setb %al2889; AVX1OR2-NEXT:    retq2890;2891; KNL-LABEL: allones_v4i32_and4:2892; KNL:       # %bb.0:2893; KNL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm02894; KNL-NEXT:    vptestnmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %k02895; KNL-NEXT:    kmovw %k0, %eax2896; KNL-NEXT:    testb $15, %al2897; KNL-NEXT:    sete %al2898; KNL-NEXT:    vzeroupper2899; KNL-NEXT:    retq2900;2901; SKX-LABEL: allones_v4i32_and4:2902; SKX:       # %bb.0:2903; SKX-NEXT:    vptestmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %k02904; SKX-NEXT:    kmovd %k0, %eax2905; SKX-NEXT:    cmpb $15, %al2906; SKX-NEXT:    sete %al2907; SKX-NEXT:    retq2908  %tmp = and <4 x i32> %arg, <i32 4, i32 4, i32 4, i32 4>2909  %tmp1 = icmp ne <4 x i32> %tmp, zeroinitializer2910  %tmp2 = bitcast <4 x i1> %tmp1 to i42911  %tmp3 = icmp eq i4 %tmp2, -12912  ret i1 %tmp32913}2914 2915define i1 @allzeros_v4i32_and4(<4 x i32> %arg) {2916; SSE2-LABEL: allzeros_v4i32_and4:2917; SSE2:       # %bb.0:2918; SSE2-NEXT:    pslld $29, %xmm02919; SSE2-NEXT:    movmskps %xmm0, %eax2920; SSE2-NEXT:    testl %eax, %eax2921; SSE2-NEXT:    sete %al2922; SSE2-NEXT:    retq2923;2924; SSE41-LABEL: allzeros_v4i32_and4:2925; SSE41:       # %bb.0:2926; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02927; SSE41-NEXT:    sete %al2928; SSE41-NEXT:    retq2929;2930; AVX1OR2-LABEL: allzeros_v4i32_and4:2931; AVX1OR2:       # %bb.0:2932; AVX1OR2-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02933; AVX1OR2-NEXT:    sete %al2934; AVX1OR2-NEXT:    retq2935;2936; KNL-LABEL: allzeros_v4i32_and4:2937; KNL:       # %bb.0:2938; KNL-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02939; KNL-NEXT:    sete %al2940; KNL-NEXT:    retq2941;2942; SKX-LABEL: allzeros_v4i32_and4:2943; SKX:       # %bb.0:2944; SKX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [17179869188,17179869188]2945; SKX-NEXT:    vptest %xmm1, %xmm02946; SKX-NEXT:    sete %al2947; SKX-NEXT:    retq2948  %tmp = and <4 x i32> %arg, <i32 4, i32 4, i32 4, i32 4>2949  %tmp1 = icmp ne <4 x i32> %tmp, zeroinitializer2950  %tmp2 = bitcast <4 x i1> %tmp1 to i42951  %tmp3 = icmp eq i4 %tmp2, 02952  ret i1 %tmp32953}2954 2955define i1 @allones_v8i32_and4(<8 x i32> %arg) {2956; SSE-LABEL: allones_v8i32_and4:2957; SSE:       # %bb.0:2958; SSE-NEXT:    pslld $29, %xmm12959; SSE-NEXT:    pslld $29, %xmm02960; SSE-NEXT:    packssdw %xmm1, %xmm02961; SSE-NEXT:    packsswb %xmm0, %xmm02962; SSE-NEXT:    pmovmskb %xmm0, %eax2963; SSE-NEXT:    cmpb $-1, %al2964; SSE-NEXT:    sete %al2965; SSE-NEXT:    retq2966;2967; AVX1-LABEL: allones_v8i32_and4:2968; AVX1:       # %bb.0:2969; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm12970; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm02971; AVX1-NEXT:    vpslld $29, %xmm0, %xmm02972; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm12973; AVX1-NEXT:    vtestps %xmm1, %xmm02974; AVX1-NEXT:    setb %al2975; AVX1-NEXT:    vzeroupper2976; AVX1-NEXT:    retq2977;2978; AVX2-LABEL: allones_v8i32_and4:2979; AVX2:       # %bb.0:2980; AVX2-NEXT:    vpslld $29, %ymm0, %ymm02981; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm12982; AVX2-NEXT:    vtestps %ymm1, %ymm02983; AVX2-NEXT:    setb %al2984; AVX2-NEXT:    vzeroupper2985; AVX2-NEXT:    retq2986;2987; KNL-LABEL: allones_v8i32_and4:2988; KNL:       # %bb.0:2989; KNL-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm02990; KNL-NEXT:    vptestmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %k02991; KNL-NEXT:    kmovw %k0, %eax2992; KNL-NEXT:    cmpb $-1, %al2993; KNL-NEXT:    sete %al2994; KNL-NEXT:    vzeroupper2995; KNL-NEXT:    retq2996;2997; SKX-LABEL: allones_v8i32_and4:2998; SKX:       # %bb.0:2999; SKX-NEXT:    vptestmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k03000; SKX-NEXT:    kortestb %k0, %k03001; SKX-NEXT:    setb %al3002; SKX-NEXT:    vzeroupper3003; SKX-NEXT:    retq3004  %tmp = and <8 x i32> %arg, <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>3005  %tmp1 = icmp ne <8 x i32> %tmp, zeroinitializer3006  %tmp2 = bitcast <8 x i1> %tmp1 to i83007  %tmp3 = icmp eq i8 %tmp2, -13008  ret i1 %tmp33009}3010 3011define i1 @allzeros_v8i32_and4(<8 x i32> %arg) {3012; SSE2-LABEL: allzeros_v8i32_and4:3013; SSE2:       # %bb.0:3014; SSE2-NEXT:    por %xmm1, %xmm03015; SSE2-NEXT:    pslld $29, %xmm03016; SSE2-NEXT:    movmskps %xmm0, %eax3017; SSE2-NEXT:    testl %eax, %eax3018; SSE2-NEXT:    sete %al3019; SSE2-NEXT:    retq3020;3021; SSE41-LABEL: allzeros_v8i32_and4:3022; SSE41:       # %bb.0:3023; SSE41-NEXT:    por %xmm1, %xmm03024; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03025; SSE41-NEXT:    sete %al3026; SSE41-NEXT:    retq3027;3028; AVX1-LABEL: allzeros_v8i32_and4:3029; AVX1:       # %bb.0:3030; AVX1-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm03031; AVX1-NEXT:    sete %al3032; AVX1-NEXT:    vzeroupper3033; AVX1-NEXT:    retq3034;3035; AVX2-LABEL: allzeros_v8i32_and4:3036; AVX2:       # %bb.0:3037; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [17179869188,17179869188,17179869188,17179869188]3038; AVX2-NEXT:    vptest %ymm1, %ymm03039; AVX2-NEXT:    sete %al3040; AVX2-NEXT:    vzeroupper3041; AVX2-NEXT:    retq3042;3043; AVX512-LABEL: allzeros_v8i32_and4:3044; AVX512:       # %bb.0:3045; AVX512-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [17179869188,17179869188,17179869188,17179869188]3046; AVX512-NEXT:    vptest %ymm1, %ymm03047; AVX512-NEXT:    sete %al3048; AVX512-NEXT:    vzeroupper3049; AVX512-NEXT:    retq3050  %tmp = and <8 x i32> %arg, <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>3051  %tmp1 = icmp ne <8 x i32> %tmp, zeroinitializer3052  %tmp2 = bitcast <8 x i1> %tmp1 to i83053  %tmp3 = icmp eq i8 %tmp2, 03054  ret i1 %tmp33055}3056 3057define i1 @allones_v16i32_and4(<16 x i32> %arg) {3058; SSE-LABEL: allones_v16i32_and4:3059; SSE:       # %bb.0:3060; SSE-NEXT:    pslld $29, %xmm33061; SSE-NEXT:    pslld $29, %xmm23062; SSE-NEXT:    packssdw %xmm3, %xmm23063; SSE-NEXT:    pslld $29, %xmm13064; SSE-NEXT:    pslld $29, %xmm03065; SSE-NEXT:    packssdw %xmm1, %xmm03066; SSE-NEXT:    packsswb %xmm2, %xmm03067; SSE-NEXT:    pmovmskb %xmm0, %eax3068; SSE-NEXT:    cmpl $65535, %eax # imm = 0xFFFF3069; SSE-NEXT:    sete %al3070; SSE-NEXT:    retq3071;3072; AVX1-LABEL: allones_v16i32_and4:3073; AVX1:       # %bb.0:3074; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm23075; AVX1-NEXT:    vpslld $29, %xmm2, %xmm23076; AVX1-NEXT:    vpslld $29, %xmm1, %xmm13077; AVX1-NEXT:    vpackssdw %xmm2, %xmm1, %xmm13078; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm23079; AVX1-NEXT:    vpslld $29, %xmm2, %xmm23080; AVX1-NEXT:    vpslld $29, %xmm0, %xmm03081; AVX1-NEXT:    vpackssdw %xmm2, %xmm0, %xmm03082; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm03083; AVX1-NEXT:    vpmovmskb %xmm0, %eax3084; AVX1-NEXT:    cmpl $65535, %eax # imm = 0xFFFF3085; AVX1-NEXT:    sete %al3086; AVX1-NEXT:    vzeroupper3087; AVX1-NEXT:    retq3088;3089; AVX2-LABEL: allones_v16i32_and4:3090; AVX2:       # %bb.0:3091; AVX2-NEXT:    vpslld $29, %ymm1, %ymm13092; AVX2-NEXT:    vpsrad $31, %ymm1, %ymm13093; AVX2-NEXT:    vpslld $29, %ymm0, %ymm03094; AVX2-NEXT:    vpsrad $31, %ymm0, %ymm03095; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm03096; AVX2-NEXT:    vpmovmskb %ymm0, %eax3097; AVX2-NEXT:    cmpl $-1, %eax3098; AVX2-NEXT:    sete %al3099; AVX2-NEXT:    vzeroupper3100; AVX2-NEXT:    retq3101;3102; AVX512-LABEL: allones_v16i32_and4:3103; AVX512:       # %bb.0:3104; AVX512-NEXT:    vptestmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %k03105; AVX512-NEXT:    kortestw %k0, %k03106; AVX512-NEXT:    setb %al3107; AVX512-NEXT:    vzeroupper3108; AVX512-NEXT:    retq3109  %tmp = and <16 x i32> %arg, <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>3110  %tmp1 = icmp ne <16 x i32> %tmp, zeroinitializer3111  %tmp2 = bitcast <16 x i1> %tmp1 to i163112  %tmp3 = icmp eq i16 %tmp2, -13113  ret i1 %tmp33114}3115 3116define i1 @allzeros_v16i32_and4(<16 x i32> %arg) {3117; SSE2-LABEL: allzeros_v16i32_and4:3118; SSE2:       # %bb.0:3119; SSE2-NEXT:    por %xmm3, %xmm13120; SSE2-NEXT:    por %xmm2, %xmm03121; SSE2-NEXT:    por %xmm1, %xmm03122; SSE2-NEXT:    pslld $29, %xmm03123; SSE2-NEXT:    movmskps %xmm0, %eax3124; SSE2-NEXT:    testl %eax, %eax3125; SSE2-NEXT:    sete %al3126; SSE2-NEXT:    retq3127;3128; SSE41-LABEL: allzeros_v16i32_and4:3129; SSE41:       # %bb.0:3130; SSE41-NEXT:    por %xmm3, %xmm13131; SSE41-NEXT:    por %xmm2, %xmm03132; SSE41-NEXT:    por %xmm1, %xmm03133; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03134; SSE41-NEXT:    sete %al3135; SSE41-NEXT:    retq3136;3137; AVX1-LABEL: allzeros_v16i32_and4:3138; AVX1:       # %bb.0:3139; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm03140; AVX1-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm03141; AVX1-NEXT:    sete %al3142; AVX1-NEXT:    vzeroupper3143; AVX1-NEXT:    retq3144;3145; AVX2-LABEL: allzeros_v16i32_and4:3146; AVX2:       # %bb.0:3147; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm03148; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [17179869188,17179869188,17179869188,17179869188]3149; AVX2-NEXT:    vptest %ymm1, %ymm03150; AVX2-NEXT:    sete %al3151; AVX2-NEXT:    vzeroupper3152; AVX2-NEXT:    retq3153;3154; AVX512-LABEL: allzeros_v16i32_and4:3155; AVX512:       # %bb.0:3156; AVX512-NEXT:    vptestmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %k03157; AVX512-NEXT:    kortestw %k0, %k03158; AVX512-NEXT:    sete %al3159; AVX512-NEXT:    vzeroupper3160; AVX512-NEXT:    retq3161  %tmp = and <16 x i32> %arg, <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>3162  %tmp1 = icmp ne <16 x i32> %tmp, zeroinitializer3163  %tmp2 = bitcast <16 x i1> %tmp1 to i163164  %tmp3 = icmp eq i16 %tmp2, 03165  ret i1 %tmp33166}3167 3168define i1 @allones_v2i64_and4(<2 x i64> %arg) {3169; SSE-LABEL: allones_v2i64_and4:3170; SSE:       # %bb.0:3171; SSE-NEXT:    psllq $61, %xmm03172; SSE-NEXT:    movmskpd %xmm0, %eax3173; SSE-NEXT:    cmpl $3, %eax3174; SSE-NEXT:    sete %al3175; SSE-NEXT:    retq3176;3177; AVX1OR2-LABEL: allones_v2i64_and4:3178; AVX1OR2:       # %bb.0:3179; AVX1OR2-NEXT:    vpsllq $61, %xmm0, %xmm03180; AVX1OR2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm13181; AVX1OR2-NEXT:    vtestpd %xmm1, %xmm03182; AVX1OR2-NEXT:    setb %al3183; AVX1OR2-NEXT:    retq3184;3185; KNL-LABEL: allones_v2i64_and4:3186; KNL:       # %bb.0:3187; KNL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm03188; KNL-NEXT:    vpmovsxbq {{.*#+}} xmm1 = [4,4]3189; KNL-NEXT:    vptestnmq %zmm1, %zmm0, %k03190; KNL-NEXT:    kmovw %k0, %eax3191; KNL-NEXT:    testb $3, %al3192; KNL-NEXT:    sete %al3193; KNL-NEXT:    vzeroupper3194; KNL-NEXT:    retq3195;3196; SKX-LABEL: allones_v2i64_and4:3197; SKX:       # %bb.0:3198; SKX-NEXT:    vptestmq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %k03199; SKX-NEXT:    kmovd %k0, %eax3200; SKX-NEXT:    cmpb $3, %al3201; SKX-NEXT:    sete %al3202; SKX-NEXT:    retq3203  %tmp = and <2 x i64> %arg, <i64 4, i64 4>3204  %tmp1 = icmp ne <2 x i64> %tmp, zeroinitializer3205  %tmp2 = bitcast <2 x i1> %tmp1 to i23206  %tmp3 = icmp eq i2 %tmp2, -13207  ret i1 %tmp33208}3209 3210define i1 @allzeros_v2i64_and4(<2 x i64> %arg) {3211; SSE2-LABEL: allzeros_v2i64_and4:3212; SSE2:       # %bb.0:3213; SSE2-NEXT:    pslld $29, %xmm03214; SSE2-NEXT:    movmskps %xmm0, %eax3215; SSE2-NEXT:    testb $5, %al3216; SSE2-NEXT:    sete %al3217; SSE2-NEXT:    retq3218;3219; SSE41-LABEL: allzeros_v2i64_and4:3220; SSE41:       # %bb.0:3221; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03222; SSE41-NEXT:    sete %al3223; SSE41-NEXT:    retq3224;3225; AVX1OR2-LABEL: allzeros_v2i64_and4:3226; AVX1OR2:       # %bb.0:3227; AVX1OR2-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03228; AVX1OR2-NEXT:    sete %al3229; AVX1OR2-NEXT:    retq3230;3231; KNL-LABEL: allzeros_v2i64_and4:3232; KNL:       # %bb.0:3233; KNL-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03234; KNL-NEXT:    sete %al3235; KNL-NEXT:    retq3236;3237; SKX-LABEL: allzeros_v2i64_and4:3238; SKX:       # %bb.0:3239; SKX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [4,4]3240; SKX-NEXT:    vptest %xmm1, %xmm03241; SKX-NEXT:    sete %al3242; SKX-NEXT:    retq3243  %tmp = and <2 x i64> %arg, <i64 4, i64 4>3244  %tmp1 = icmp ne <2 x i64> %tmp, zeroinitializer3245  %tmp2 = bitcast <2 x i1> %tmp1 to i23246  %tmp3 = icmp eq i2 %tmp2, 03247  ret i1 %tmp33248}3249 3250define i1 @allones_v4i64_and4(<4 x i64> %arg) {3251; SSE-LABEL: allones_v4i64_and4:3252; SSE:       # %bb.0:3253; SSE-NEXT:    psllq $61, %xmm13254; SSE-NEXT:    psllq $61, %xmm03255; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,3],xmm1[1,3]3256; SSE-NEXT:    movmskps %xmm0, %eax3257; SSE-NEXT:    cmpl $15, %eax3258; SSE-NEXT:    sete %al3259; SSE-NEXT:    retq3260;3261; AVX1-LABEL: allones_v4i64_and4:3262; AVX1:       # %bb.0:3263; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13264; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm03265; AVX1-NEXT:    vpsllq $61, %xmm0, %xmm03266; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm13267; AVX1-NEXT:    vtestpd %xmm1, %xmm03268; AVX1-NEXT:    setb %al3269; AVX1-NEXT:    vzeroupper3270; AVX1-NEXT:    retq3271;3272; AVX2-LABEL: allones_v4i64_and4:3273; AVX2:       # %bb.0:3274; AVX2-NEXT:    vpsllq $61, %ymm0, %ymm03275; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm13276; AVX2-NEXT:    vtestpd %ymm1, %ymm03277; AVX2-NEXT:    setb %al3278; AVX2-NEXT:    vzeroupper3279; AVX2-NEXT:    retq3280;3281; KNL-LABEL: allones_v4i64_and4:3282; KNL:       # %bb.0:3283; KNL-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm03284; KNL-NEXT:    vptestnmq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %k03285; KNL-NEXT:    kmovw %k0, %eax3286; KNL-NEXT:    testb $15, %al3287; KNL-NEXT:    sete %al3288; KNL-NEXT:    vzeroupper3289; KNL-NEXT:    retq3290;3291; SKX-LABEL: allones_v4i64_and4:3292; SKX:       # %bb.0:3293; SKX-NEXT:    vptestmq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k03294; SKX-NEXT:    kmovd %k0, %eax3295; SKX-NEXT:    cmpb $15, %al3296; SKX-NEXT:    sete %al3297; SKX-NEXT:    vzeroupper3298; SKX-NEXT:    retq3299  %tmp = and <4 x i64> %arg, <i64 4, i64 4, i64 4, i64 4>3300  %tmp1 = icmp ne <4 x i64> %tmp, zeroinitializer3301  %tmp2 = bitcast <4 x i1> %tmp1 to i43302  %tmp3 = icmp eq i4 %tmp2, -13303  ret i1 %tmp33304}3305 3306define i1 @allzeros_v4i64_and4(<4 x i64> %arg) {3307; SSE2-LABEL: allzeros_v4i64_and4:3308; SSE2:       # %bb.0:3309; SSE2-NEXT:    por %xmm1, %xmm03310; SSE2-NEXT:    pslld $29, %xmm03311; SSE2-NEXT:    movmskps %xmm0, %eax3312; SSE2-NEXT:    testb $5, %al3313; SSE2-NEXT:    sete %al3314; SSE2-NEXT:    retq3315;3316; SSE41-LABEL: allzeros_v4i64_and4:3317; SSE41:       # %bb.0:3318; SSE41-NEXT:    por %xmm1, %xmm03319; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03320; SSE41-NEXT:    sete %al3321; SSE41-NEXT:    retq3322;3323; AVX1-LABEL: allzeros_v4i64_and4:3324; AVX1:       # %bb.0:3325; AVX1-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm03326; AVX1-NEXT:    sete %al3327; AVX1-NEXT:    vzeroupper3328; AVX1-NEXT:    retq3329;3330; AVX2-LABEL: allzeros_v4i64_and4:3331; AVX2:       # %bb.0:3332; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4,4,4,4]3333; AVX2-NEXT:    vptest %ymm1, %ymm03334; AVX2-NEXT:    sete %al3335; AVX2-NEXT:    vzeroupper3336; AVX2-NEXT:    retq3337;3338; AVX512-LABEL: allzeros_v4i64_and4:3339; AVX512:       # %bb.0:3340; AVX512-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4,4,4,4]3341; AVX512-NEXT:    vptest %ymm1, %ymm03342; AVX512-NEXT:    sete %al3343; AVX512-NEXT:    vzeroupper3344; AVX512-NEXT:    retq3345  %tmp = and <4 x i64> %arg, <i64 4, i64 4, i64 4, i64 4>3346  %tmp1 = icmp ne <4 x i64> %tmp, zeroinitializer3347  %tmp2 = bitcast <4 x i1> %tmp1 to i43348  %tmp3 = icmp eq i4 %tmp2, 03349  ret i1 %tmp33350}3351 3352define i1 @allones_v8i64_and4(<8 x i64> %arg) {3353; SSE-LABEL: allones_v8i64_and4:3354; SSE:       # %bb.0:3355; SSE-NEXT:    psllq $61, %xmm33356; SSE-NEXT:    psllq $61, %xmm23357; SSE-NEXT:    packssdw %xmm3, %xmm23358; SSE-NEXT:    psllq $61, %xmm13359; SSE-NEXT:    psllq $61, %xmm03360; SSE-NEXT:    packssdw %xmm1, %xmm03361; SSE-NEXT:    packssdw %xmm2, %xmm03362; SSE-NEXT:    packsswb %xmm0, %xmm03363; SSE-NEXT:    pmovmskb %xmm0, %eax3364; SSE-NEXT:    cmpb $-1, %al3365; SSE-NEXT:    sete %al3366; SSE-NEXT:    retq3367;3368; AVX1-LABEL: allones_v8i64_and4:3369; AVX1:       # %bb.0:3370; AVX1-NEXT:    vpsllq $61, %xmm1, %xmm23371; AVX1-NEXT:    vpsllq $61, %xmm0, %xmm33372; AVX1-NEXT:    vpand %xmm2, %xmm3, %xmm23373; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm13374; AVX1-NEXT:    vpsllq $61, %xmm1, %xmm13375; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm03376; AVX1-NEXT:    vpsllq $61, %xmm0, %xmm03377; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm03378; AVX1-NEXT:    vpackssdw %xmm0, %xmm2, %xmm03379; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm13380; AVX1-NEXT:    vtestps %xmm1, %xmm03381; AVX1-NEXT:    setb %al3382; AVX1-NEXT:    vzeroupper3383; AVX1-NEXT:    retq3384;3385; AVX2-LABEL: allones_v8i64_and4:3386; AVX2:       # %bb.0:3387; AVX2-NEXT:    vpsllq $61, %ymm1, %ymm13388; AVX2-NEXT:    vpsllq $61, %ymm0, %ymm03389; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm03390; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm13391; AVX2-NEXT:    vtestps %ymm1, %ymm03392; AVX2-NEXT:    setb %al3393; AVX2-NEXT:    vzeroupper3394; AVX2-NEXT:    retq3395;3396; KNL-LABEL: allones_v8i64_and4:3397; KNL:       # %bb.0:3398; KNL-NEXT:    vptestmq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %k03399; KNL-NEXT:    kmovw %k0, %eax3400; KNL-NEXT:    cmpb $-1, %al3401; KNL-NEXT:    sete %al3402; KNL-NEXT:    vzeroupper3403; KNL-NEXT:    retq3404;3405; SKX-LABEL: allones_v8i64_and4:3406; SKX:       # %bb.0:3407; SKX-NEXT:    vptestmq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %k03408; SKX-NEXT:    kortestb %k0, %k03409; SKX-NEXT:    setb %al3410; SKX-NEXT:    vzeroupper3411; SKX-NEXT:    retq3412  %tmp = and <8 x i64> %arg, <i64 4, i64 4, i64 4, i64 4, i64 4, i64 4, i64 4, i64 4>3413  %tmp1 = icmp ne <8 x i64> %tmp, zeroinitializer3414  %tmp2 = bitcast <8 x i1> %tmp1 to i83415  %tmp3 = icmp eq i8 %tmp2, -13416  ret i1 %tmp33417}3418 3419define i1 @allzeros_v8i64_and4(<8 x i64> %arg) {3420; SSE2-LABEL: allzeros_v8i64_and4:3421; SSE2:       # %bb.0:3422; SSE2-NEXT:    por %xmm3, %xmm13423; SSE2-NEXT:    por %xmm2, %xmm03424; SSE2-NEXT:    por %xmm1, %xmm03425; SSE2-NEXT:    pslld $29, %xmm03426; SSE2-NEXT:    movmskps %xmm0, %eax3427; SSE2-NEXT:    testb $5, %al3428; SSE2-NEXT:    sete %al3429; SSE2-NEXT:    retq3430;3431; SSE41-LABEL: allzeros_v8i64_and4:3432; SSE41:       # %bb.0:3433; SSE41-NEXT:    por %xmm3, %xmm13434; SSE41-NEXT:    por %xmm2, %xmm03435; SSE41-NEXT:    por %xmm1, %xmm03436; SSE41-NEXT:    ptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03437; SSE41-NEXT:    sete %al3438; SSE41-NEXT:    retq3439;3440; AVX1-LABEL: allzeros_v8i64_and4:3441; AVX1:       # %bb.0:3442; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm03443; AVX1-NEXT:    vptest {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm03444; AVX1-NEXT:    sete %al3445; AVX1-NEXT:    vzeroupper3446; AVX1-NEXT:    retq3447;3448; AVX2-LABEL: allzeros_v8i64_and4:3449; AVX2:       # %bb.0:3450; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm03451; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4,4,4,4]3452; AVX2-NEXT:    vptest %ymm1, %ymm03453; AVX2-NEXT:    sete %al3454; AVX2-NEXT:    vzeroupper3455; AVX2-NEXT:    retq3456;3457; AVX512-LABEL: allzeros_v8i64_and4:3458; AVX512:       # %bb.0:3459; AVX512-NEXT:    vpbroadcastq {{.*#+}} zmm1 = [4,4,4,4,4,4,4,4]3460; AVX512-NEXT:    vptestmd %zmm1, %zmm0, %k03461; AVX512-NEXT:    kortestw %k0, %k03462; AVX512-NEXT:    sete %al3463; AVX512-NEXT:    vzeroupper3464; AVX512-NEXT:    retq3465  %tmp = and <8 x i64> %arg, <i64 4, i64 4, i64 4, i64 4, i64 4, i64 4, i64 4, i64 4>3466  %tmp1 = icmp ne <8 x i64> %tmp, zeroinitializer3467  %tmp2 = bitcast <8 x i1> %tmp1 to i83468  %tmp3 = icmp eq i8 %tmp2, 03469  ret i1 %tmp33470}3471 3472; FCMP may use ISD::SETNE when nnan, don't attempt to use LowerVectorAllEqual.3473define i1 @allzeros_v8f32_nnan(<8 x float> %a0) {3474; SSE-LABEL: allzeros_v8f32_nnan:3475; SSE:       # %bb.0:3476; SSE-NEXT:    xorps %xmm2, %xmm23477; SSE-NEXT:    cmpneqps %xmm2, %xmm13478; SSE-NEXT:    cmpneqps %xmm2, %xmm03479; SSE-NEXT:    packssdw %xmm1, %xmm03480; SSE-NEXT:    pmovmskb %xmm0, %eax3481; SSE-NEXT:    testl %eax, %eax3482; SSE-NEXT:    setne %al3483; SSE-NEXT:    retq3484;3485; AVX1OR2-LABEL: allzeros_v8f32_nnan:3486; AVX1OR2:       # %bb.0:3487; AVX1OR2-NEXT:    vxorps %xmm1, %xmm1, %xmm13488; AVX1OR2-NEXT:    vcmpneqps %ymm1, %ymm0, %ymm03489; AVX1OR2-NEXT:    vtestps %ymm0, %ymm03490; AVX1OR2-NEXT:    setne %al3491; AVX1OR2-NEXT:    vzeroupper3492; AVX1OR2-NEXT:    retq3493;3494; KNL-LABEL: allzeros_v8f32_nnan:3495; KNL:       # %bb.0:3496; KNL-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm03497; KNL-NEXT:    vxorps %xmm1, %xmm1, %xmm13498; KNL-NEXT:    vcmpneqps %zmm1, %zmm0, %k03499; KNL-NEXT:    kmovw %k0, %eax3500; KNL-NEXT:    testb %al, %al3501; KNL-NEXT:    setne %al3502; KNL-NEXT:    vzeroupper3503; KNL-NEXT:    retq3504;3505; SKX-LABEL: allzeros_v8f32_nnan:3506; SKX:       # %bb.0:3507; SKX-NEXT:    vxorps %xmm1, %xmm1, %xmm13508; SKX-NEXT:    vcmpneqps %ymm1, %ymm0, %k03509; SKX-NEXT:    kortestb %k0, %k03510; SKX-NEXT:    setne %al3511; SKX-NEXT:    vzeroupper3512; SKX-NEXT:    retq3513  %1 = fcmp nnan une <8 x float> %a0, zeroinitializer3514  %2 = bitcast <8 x i1> %1 to i83515  %3 = icmp ne i8 %2, 03516  ret i1 %33517}3518 3519; The below are IR patterns that should directly represent the behavior of a3520; MOVMSK instruction.3521 3522define i32 @movmskpd(<2 x double> %x) {3523; SSE-LABEL: movmskpd:3524; SSE:       # %bb.0:3525; SSE-NEXT:    movmskpd %xmm0, %eax3526; SSE-NEXT:    retq3527;3528; AVX-LABEL: movmskpd:3529; AVX:       # %bb.0:3530; AVX-NEXT:    vmovmskpd %xmm0, %eax3531; AVX-NEXT:    retq3532  %a = bitcast <2 x double> %x to <2 x i64>3533  %b = icmp slt <2 x i64> %a, zeroinitializer3534  %c = bitcast <2 x i1> %b to i23535  %d = zext i2 %c to i323536  ret i32 %d3537}3538 3539define i32 @movmskps(<4 x float> %x) {3540; SSE-LABEL: movmskps:3541; SSE:       # %bb.0:3542; SSE-NEXT:    movmskps %xmm0, %eax3543; SSE-NEXT:    retq3544;3545; AVX-LABEL: movmskps:3546; AVX:       # %bb.0:3547; AVX-NEXT:    vmovmskps %xmm0, %eax3548; AVX-NEXT:    retq3549  %a = bitcast <4 x float> %x to <4 x i32>3550  %b = icmp slt <4 x i32> %a, zeroinitializer3551  %c = bitcast <4 x i1> %b to i43552  %d = zext i4 %c to i323553  ret i32 %d3554}3555 3556define i32 @movmskpd256(<4 x double> %x) {3557; SSE-LABEL: movmskpd256:3558; SSE:       # %bb.0:3559; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,3],xmm1[1,3]3560; SSE-NEXT:    movmskps %xmm0, %eax3561; SSE-NEXT:    retq3562;3563; AVX-LABEL: movmskpd256:3564; AVX:       # %bb.0:3565; AVX-NEXT:    vmovmskpd %ymm0, %eax3566; AVX-NEXT:    vzeroupper3567; AVX-NEXT:    retq3568  %a = bitcast <4 x double> %x to <4 x i64>3569  %b = icmp slt <4 x i64> %a, zeroinitializer3570  %c = bitcast <4 x i1> %b to i43571  %d = zext i4 %c to i323572  ret i32 %d3573}3574 3575define i32 @movmskps256(<8 x float> %x) {3576; SSE-LABEL: movmskps256:3577; SSE:       # %bb.0:3578; SSE-NEXT:    packssdw %xmm1, %xmm03579; SSE-NEXT:    packsswb %xmm0, %xmm03580; SSE-NEXT:    pmovmskb %xmm0, %eax3581; SSE-NEXT:    movzbl %al, %eax3582; SSE-NEXT:    retq3583;3584; AVX-LABEL: movmskps256:3585; AVX:       # %bb.0:3586; AVX-NEXT:    vmovmskps %ymm0, %eax3587; AVX-NEXT:    vzeroupper3588; AVX-NEXT:    retq3589  %a = bitcast <8 x float> %x to <8 x i32>3590  %b = icmp slt <8 x i32> %a, zeroinitializer3591  %c = bitcast <8 x i1> %b to i83592  %d = zext i8 %c to i323593  ret i32 %d3594}3595 3596define i32 @movmskb(<16 x i8> %x) {3597; SSE-LABEL: movmskb:3598; SSE:       # %bb.0:3599; SSE-NEXT:    pmovmskb %xmm0, %eax3600; SSE-NEXT:    retq3601;3602; AVX-LABEL: movmskb:3603; AVX:       # %bb.0:3604; AVX-NEXT:    vpmovmskb %xmm0, %eax3605; AVX-NEXT:    retq3606  %a = icmp slt <16 x i8> %x, zeroinitializer3607  %b = bitcast <16 x i1> %a to i163608  %c = zext i16 %b to i323609  ret i32 %c3610}3611 3612define i32 @movmskb256(<32 x i8> %x) {3613; SSE-LABEL: movmskb256:3614; SSE:       # %bb.0:3615; SSE-NEXT:    pmovmskb %xmm0, %ecx3616; SSE-NEXT:    pmovmskb %xmm1, %eax3617; SSE-NEXT:    shll $16, %eax3618; SSE-NEXT:    orl %ecx, %eax3619; SSE-NEXT:    retq3620;3621; AVX1-LABEL: movmskb256:3622; AVX1:       # %bb.0:3623; AVX1-NEXT:    vpmovmskb %xmm0, %ecx3624; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm03625; AVX1-NEXT:    vpmovmskb %xmm0, %eax3626; AVX1-NEXT:    shll $16, %eax3627; AVX1-NEXT:    orl %ecx, %eax3628; AVX1-NEXT:    vzeroupper3629; AVX1-NEXT:    retq3630;3631; AVX2-LABEL: movmskb256:3632; AVX2:       # %bb.0:3633; AVX2-NEXT:    vpmovmskb %ymm0, %eax3634; AVX2-NEXT:    vzeroupper3635; AVX2-NEXT:    retq3636;3637; AVX512-LABEL: movmskb256:3638; AVX512:       # %bb.0:3639; AVX512-NEXT:    vpmovmskb %ymm0, %eax3640; AVX512-NEXT:    vzeroupper3641; AVX512-NEXT:    retq3642  %a = icmp slt <32 x i8> %x, zeroinitializer3643  %b = bitcast <32 x i1> %a to i323644  ret i32 %b3645}3646 3647; Multiple extract elements from a vector compare.3648 3649define i1 @movmsk_v16i8(<16 x i8> %x, <16 x i8> %y) {3650; SSE-LABEL: movmsk_v16i8:3651; SSE:       # %bb.0:3652; SSE-NEXT:    pcmpeqb %xmm1, %xmm03653; SSE-NEXT:    pmovmskb %xmm0, %eax3654; SSE-NEXT:    movl %eax, %ecx3655; SSE-NEXT:    shrl $15, %ecx3656; SSE-NEXT:    movl %eax, %edx3657; SSE-NEXT:    shrl $8, %edx3658; SSE-NEXT:    andl $1, %edx3659; SSE-NEXT:    andl $8, %eax3660; SSE-NEXT:    shrl $3, %eax3661; SSE-NEXT:    xorl %edx, %eax3662; SSE-NEXT:    andl %ecx, %eax3663; SSE-NEXT:    # kill: def $al killed $al killed $eax3664; SSE-NEXT:    retq3665;3666; AVX1OR2-LABEL: movmsk_v16i8:3667; AVX1OR2:       # %bb.0:3668; AVX1OR2-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm03669; AVX1OR2-NEXT:    vpmovmskb %xmm0, %eax3670; AVX1OR2-NEXT:    movl %eax, %ecx3671; AVX1OR2-NEXT:    shrl $15, %ecx3672; AVX1OR2-NEXT:    movl %eax, %edx3673; AVX1OR2-NEXT:    shrl $8, %edx3674; AVX1OR2-NEXT:    andl $1, %edx3675; AVX1OR2-NEXT:    andl $8, %eax3676; AVX1OR2-NEXT:    shrl $3, %eax3677; AVX1OR2-NEXT:    xorl %edx, %eax3678; AVX1OR2-NEXT:    andl %ecx, %eax3679; AVX1OR2-NEXT:    # kill: def $al killed $al killed $eax3680; AVX1OR2-NEXT:    retq3681;3682; KNL-LABEL: movmsk_v16i8:3683; KNL:       # %bb.0:3684; KNL-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm03685; KNL-NEXT:    vpextrb $15, %xmm0, %ecx3686; KNL-NEXT:    vpextrb $8, %xmm0, %edx3687; KNL-NEXT:    vpextrb $3, %xmm0, %eax3688; KNL-NEXT:    xorl %edx, %eax3689; KNL-NEXT:    andl %ecx, %eax3690; KNL-NEXT:    # kill: def $al killed $al killed $eax3691; KNL-NEXT:    retq3692;3693; SKX-LABEL: movmsk_v16i8:3694; SKX:       # %bb.0:3695; SKX-NEXT:    vpcmpeqb %xmm1, %xmm0, %k03696; SKX-NEXT:    kshiftrw $15, %k0, %k13697; SKX-NEXT:    kmovd %k1, %ecx3698; SKX-NEXT:    kshiftrw $8, %k0, %k13699; SKX-NEXT:    kmovd %k1, %edx3700; SKX-NEXT:    kshiftrw $3, %k0, %k03701; SKX-NEXT:    kmovd %k0, %eax3702; SKX-NEXT:    xorb %dl, %al3703; SKX-NEXT:    andb %cl, %al3704; SKX-NEXT:    # kill: def $al killed $al killed $eax3705; SKX-NEXT:    retq3706  %cmp = icmp eq <16 x i8> %x, %y3707  %e1 = extractelement <16 x i1> %cmp, i32 33708  %e2 = extractelement <16 x i1> %cmp, i32 83709  %e3 = extractelement <16 x i1> %cmp, i32 153710  %u1 = xor i1 %e1, %e23711  %u2 = and i1 %e3, %u13712  ret i1 %u23713}3714 3715define i1 @movmsk_v8i16(<8 x i16> %x, <8 x i16> %y) {3716; SSE-LABEL: movmsk_v8i16:3717; SSE:       # %bb.0:3718; SSE-NEXT:    pcmpgtw %xmm1, %xmm03719; SSE-NEXT:    packsswb %xmm0, %xmm03720; SSE-NEXT:    pmovmskb %xmm0, %eax3721; SSE-NEXT:    notb %al3722; SSE-NEXT:    testb $-109, %al3723; SSE-NEXT:    sete %al3724; SSE-NEXT:    retq3725;3726; AVX1OR2-LABEL: movmsk_v8i16:3727; AVX1OR2:       # %bb.0:3728; AVX1OR2-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm03729; AVX1OR2-NEXT:    vpacksswb %xmm0, %xmm0, %xmm03730; AVX1OR2-NEXT:    vpmovmskb %xmm0, %eax3731; AVX1OR2-NEXT:    notb %al3732; AVX1OR2-NEXT:    testb $-109, %al3733; AVX1OR2-NEXT:    sete %al3734; AVX1OR2-NEXT:    retq3735;3736; KNL-LABEL: movmsk_v8i16:3737; KNL:       # %bb.0:3738; KNL-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm03739; KNL-NEXT:    vpmovsxwq %xmm0, %zmm03740; KNL-NEXT:    vptestnmq %zmm0, %zmm0, %k03741; KNL-NEXT:    kmovw %k0, %eax3742; KNL-NEXT:    testb $-109, %al3743; KNL-NEXT:    sete %al3744; KNL-NEXT:    vzeroupper3745; KNL-NEXT:    retq3746;3747; SKX-LABEL: movmsk_v8i16:3748; SKX:       # %bb.0:3749; SKX-NEXT:    vpcmpgtw %xmm1, %xmm0, %k03750; SKX-NEXT:    knotb %k0, %k03751; SKX-NEXT:    kmovd %k0, %eax3752; SKX-NEXT:    testb $-109, %al3753; SKX-NEXT:    sete %al3754; SKX-NEXT:    retq3755  %cmp = icmp sgt <8 x i16> %x, %y3756  %e1 = extractelement <8 x i1> %cmp, i32 03757  %e2 = extractelement <8 x i1> %cmp, i32 13758  %e3 = extractelement <8 x i1> %cmp, i32 73759  %e4 = extractelement <8 x i1> %cmp, i32 43760  %u1 = and i1 %e1, %e23761  %u2 = and i1 %e3, %e43762  %u3 = and i1 %u1, %u23763  ret i1 %u33764}3765 3766; TODO: Replace shift+mask chain with AND+CMP.3767define i1 @movmsk_v4i32(<4 x i32> %x, <4 x i32> %y) {3768; SSE-LABEL: movmsk_v4i32:3769; SSE:       # %bb.0:3770; SSE-NEXT:    pcmpgtd %xmm0, %xmm13771; SSE-NEXT:    movmskps %xmm1, %eax3772; SSE-NEXT:    movl %eax, %ecx3773; SSE-NEXT:    shrb $3, %cl3774; SSE-NEXT:    andb $4, %al3775; SSE-NEXT:    shrb $2, %al3776; SSE-NEXT:    xorb %cl, %al3777; SSE-NEXT:    # kill: def $al killed $al killed $eax3778; SSE-NEXT:    retq3779;3780; AVX1OR2-LABEL: movmsk_v4i32:3781; AVX1OR2:       # %bb.0:3782; AVX1OR2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm03783; AVX1OR2-NEXT:    vmovmskps %xmm0, %eax3784; AVX1OR2-NEXT:    movl %eax, %ecx3785; AVX1OR2-NEXT:    shrb $3, %cl3786; AVX1OR2-NEXT:    andb $4, %al3787; AVX1OR2-NEXT:    shrb $2, %al3788; AVX1OR2-NEXT:    xorb %cl, %al3789; AVX1OR2-NEXT:    # kill: def $al killed $al killed $eax3790; AVX1OR2-NEXT:    retq3791;3792; KNL-LABEL: movmsk_v4i32:3793; KNL:       # %bb.0:3794; KNL-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm13795; KNL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm03796; KNL-NEXT:    vpcmpgtd %zmm0, %zmm1, %k03797; KNL-NEXT:    kshiftrw $3, %k0, %k13798; KNL-NEXT:    kmovw %k1, %ecx3799; KNL-NEXT:    kshiftrw $2, %k0, %k03800; KNL-NEXT:    kmovw %k0, %eax3801; KNL-NEXT:    xorb %cl, %al3802; KNL-NEXT:    # kill: def $al killed $al killed $eax3803; KNL-NEXT:    vzeroupper3804; KNL-NEXT:    retq3805;3806; SKX-LABEL: movmsk_v4i32:3807; SKX:       # %bb.0:3808; SKX-NEXT:    vpcmpgtd %xmm0, %xmm1, %k03809; SKX-NEXT:    kshiftrb $3, %k0, %k13810; SKX-NEXT:    kmovd %k1, %ecx3811; SKX-NEXT:    kshiftrb $2, %k0, %k03812; SKX-NEXT:    kmovd %k0, %eax3813; SKX-NEXT:    xorb %cl, %al3814; SKX-NEXT:    # kill: def $al killed $al killed $eax3815; SKX-NEXT:    retq3816  %cmp = icmp slt <4 x i32> %x, %y3817  %e1 = extractelement <4 x i1> %cmp, i32 23818  %e2 = extractelement <4 x i1> %cmp, i32 33819  %u1 = xor i1 %e1, %e23820  ret i1 %u13821}3822 3823define i1 @movmsk_and_v2i64(<2 x i64> %x, <2 x i64> %y) {3824; SSE2-LABEL: movmsk_and_v2i64:3825; SSE2:       # %bb.0:3826; SSE2-NEXT:    pcmpeqd %xmm1, %xmm03827; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]3828; SSE2-NEXT:    pand %xmm0, %xmm13829; SSE2-NEXT:    movmskpd %xmm1, %eax3830; SSE2-NEXT:    testl %eax, %eax3831; SSE2-NEXT:    sete %al3832; SSE2-NEXT:    retq3833;3834; SSE41-LABEL: movmsk_and_v2i64:3835; SSE41:       # %bb.0:3836; SSE41-NEXT:    pcmpeqq %xmm1, %xmm03837; SSE41-NEXT:    movmskpd %xmm0, %eax3838; SSE41-NEXT:    testl %eax, %eax3839; SSE41-NEXT:    sete %al3840; SSE41-NEXT:    retq3841;3842; AVX1OR2-LABEL: movmsk_and_v2i64:3843; AVX1OR2:       # %bb.0:3844; AVX1OR2-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm03845; AVX1OR2-NEXT:    vtestpd %xmm0, %xmm03846; AVX1OR2-NEXT:    sete %al3847; AVX1OR2-NEXT:    retq3848;3849; KNL-LABEL: movmsk_and_v2i64:3850; KNL:       # %bb.0:3851; KNL-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm13852; KNL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm03853; KNL-NEXT:    vpcmpeqq %zmm1, %zmm0, %k03854; KNL-NEXT:    kmovw %k0, %eax3855; KNL-NEXT:    testb $3, %al3856; KNL-NEXT:    sete %al3857; KNL-NEXT:    vzeroupper3858; KNL-NEXT:    retq3859;3860; SKX-LABEL: movmsk_and_v2i64:3861; SKX:       # %bb.0:3862; SKX-NEXT:    vpcmpneqq %xmm1, %xmm0, %k03863; SKX-NEXT:    kmovd %k0, %eax3864; SKX-NEXT:    cmpb $3, %al3865; SKX-NEXT:    sete %al3866; SKX-NEXT:    retq3867  %cmp = icmp ne <2 x i64> %x, %y3868  %e1 = extractelement <2 x i1> %cmp, i32 03869  %e2 = extractelement <2 x i1> %cmp, i32 13870  %u1 = and i1 %e1, %e23871  ret i1 %u13872}3873 3874define i1 @movmsk_or_v2i64(<2 x i64> %x, <2 x i64> %y) {3875; SSE2-LABEL: movmsk_or_v2i64:3876; SSE2:       # %bb.0:3877; SSE2-NEXT:    pcmpeqd %xmm1, %xmm03878; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]3879; SSE2-NEXT:    pand %xmm0, %xmm13880; SSE2-NEXT:    movmskpd %xmm1, %eax3881; SSE2-NEXT:    cmpl $3, %eax3882; SSE2-NEXT:    setne %al3883; SSE2-NEXT:    retq3884;3885; SSE41-LABEL: movmsk_or_v2i64:3886; SSE41:       # %bb.0:3887; SSE41-NEXT:    pxor %xmm1, %xmm03888; SSE41-NEXT:    ptest %xmm0, %xmm03889; SSE41-NEXT:    setne %al3890; SSE41-NEXT:    retq3891;3892; AVX-LABEL: movmsk_or_v2i64:3893; AVX:       # %bb.0:3894; AVX-NEXT:    vpxor %xmm1, %xmm0, %xmm03895; AVX-NEXT:    vptest %xmm0, %xmm03896; AVX-NEXT:    setne %al3897; AVX-NEXT:    retq3898  %cmp = icmp ne <2 x i64> %x, %y3899  %e1 = extractelement <2 x i1> %cmp, i32 03900  %e2 = extractelement <2 x i1> %cmp, i32 13901  %u1 = or i1 %e1, %e23902  ret i1 %u13903}3904 3905define i1 @movmsk_v4f32(<4 x float> %x, <4 x float> %y) {3906; SSE-LABEL: movmsk_v4f32:3907; SSE:       # %bb.0:3908; SSE-NEXT:    movaps %xmm0, %xmm23909; SSE-NEXT:    cmpeqps %xmm1, %xmm23910; SSE-NEXT:    cmpunordps %xmm1, %xmm03911; SSE-NEXT:    orps %xmm2, %xmm03912; SSE-NEXT:    movmskps %xmm0, %eax3913; SSE-NEXT:    testb $14, %al3914; SSE-NEXT:    setne %al3915; SSE-NEXT:    retq3916;3917; AVX1OR2-LABEL: movmsk_v4f32:3918; AVX1OR2:       # %bb.0:3919; AVX1OR2-NEXT:    vcmpeq_uqps %xmm1, %xmm0, %xmm03920; AVX1OR2-NEXT:    vmovmskps %xmm0, %eax3921; AVX1OR2-NEXT:    testb $14, %al3922; AVX1OR2-NEXT:    setne %al3923; AVX1OR2-NEXT:    retq3924;3925; KNL-LABEL: movmsk_v4f32:3926; KNL:       # %bb.0:3927; KNL-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm13928; KNL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm03929; KNL-NEXT:    vcmpeq_uqps %zmm1, %zmm0, %k03930; KNL-NEXT:    kmovw %k0, %eax3931; KNL-NEXT:    testb $14, %al3932; KNL-NEXT:    setne %al3933; KNL-NEXT:    vzeroupper3934; KNL-NEXT:    retq3935;3936; SKX-LABEL: movmsk_v4f32:3937; SKX:       # %bb.0:3938; SKX-NEXT:    vcmpeq_uqps %xmm1, %xmm0, %k03939; SKX-NEXT:    kmovd %k0, %eax3940; SKX-NEXT:    testb $14, %al3941; SKX-NEXT:    setne %al3942; SKX-NEXT:    retq3943  %cmp = fcmp ueq <4 x float> %x, %y3944  %e1 = extractelement <4 x i1> %cmp, i32 13945  %e2 = extractelement <4 x i1> %cmp, i32 23946  %e3 = extractelement <4 x i1> %cmp, i32 33947  %u1 = or i1 %e1, %e23948  %u2 = or i1 %u1, %e33949  ret i1 %u23950}3951 3952define i1 @movmsk_and_v2f64(<2 x double> %x, <2 x double> %y) {3953; SSE-LABEL: movmsk_and_v2f64:3954; SSE:       # %bb.0:3955; SSE-NEXT:    cmplepd %xmm0, %xmm13956; SSE-NEXT:    movmskpd %xmm1, %eax3957; SSE-NEXT:    cmpl $3, %eax3958; SSE-NEXT:    sete %al3959; SSE-NEXT:    retq3960;3961; AVX1OR2-LABEL: movmsk_and_v2f64:3962; AVX1OR2:       # %bb.0:3963; AVX1OR2-NEXT:    vcmplepd %xmm0, %xmm1, %xmm03964; AVX1OR2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm13965; AVX1OR2-NEXT:    vtestpd %xmm1, %xmm03966; AVX1OR2-NEXT:    setb %al3967; AVX1OR2-NEXT:    retq3968;3969; KNL-LABEL: movmsk_and_v2f64:3970; KNL:       # %bb.0:3971; KNL-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm13972; KNL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm03973; KNL-NEXT:    vcmplepd %zmm0, %zmm1, %k03974; KNL-NEXT:    knotw %k0, %k03975; KNL-NEXT:    kmovw %k0, %eax3976; KNL-NEXT:    testb $3, %al3977; KNL-NEXT:    sete %al3978; KNL-NEXT:    vzeroupper3979; KNL-NEXT:    retq3980;3981; SKX-LABEL: movmsk_and_v2f64:3982; SKX:       # %bb.0:3983; SKX-NEXT:    vcmplepd %xmm0, %xmm1, %k03984; SKX-NEXT:    kmovd %k0, %eax3985; SKX-NEXT:    cmpb $3, %al3986; SKX-NEXT:    sete %al3987; SKX-NEXT:    retq3988  %cmp = fcmp oge <2 x double> %x, %y3989  %e1 = extractelement <2 x i1> %cmp, i32 03990  %e2 = extractelement <2 x i1> %cmp, i32 13991  %u1 = and i1 %e1, %e23992  ret i1 %u13993}3994 3995define i1 @movmsk_or_v2f64(<2 x double> %x, <2 x double> %y) {3996; SSE-LABEL: movmsk_or_v2f64:3997; SSE:       # %bb.0:3998; SSE-NEXT:    cmplepd %xmm0, %xmm13999; SSE-NEXT:    movmskpd %xmm1, %eax4000; SSE-NEXT:    testl %eax, %eax4001; SSE-NEXT:    setne %al4002; SSE-NEXT:    retq4003;4004; AVX1OR2-LABEL: movmsk_or_v2f64:4005; AVX1OR2:       # %bb.0:4006; AVX1OR2-NEXT:    vcmplepd %xmm0, %xmm1, %xmm04007; AVX1OR2-NEXT:    vtestpd %xmm0, %xmm04008; AVX1OR2-NEXT:    setne %al4009; AVX1OR2-NEXT:    retq4010;4011; KNL-LABEL: movmsk_or_v2f64:4012; KNL:       # %bb.0:4013; KNL-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm14014; KNL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm04015; KNL-NEXT:    vcmplepd %zmm0, %zmm1, %k04016; KNL-NEXT:    kmovw %k0, %eax4017; KNL-NEXT:    testb $3, %al4018; KNL-NEXT:    setne %al4019; KNL-NEXT:    vzeroupper4020; KNL-NEXT:    retq4021;4022; SKX-LABEL: movmsk_or_v2f64:4023; SKX:       # %bb.0:4024; SKX-NEXT:    vcmplepd %xmm0, %xmm1, %k04025; SKX-NEXT:    kortestb %k0, %k04026; SKX-NEXT:    setne %al4027; SKX-NEXT:    retq4028  %cmp = fcmp oge <2 x double> %x, %y4029  %e1 = extractelement <2 x i1> %cmp, i32 04030  %e2 = extractelement <2 x i1> %cmp, i32 14031  %u1 = or i1 %e1, %e24032  ret i1 %u14033}4034 4035; Extract elements from a non-constant index.4036 4037define i1 @movmsk_v16i8_var(<16 x i8> %x, <16 x i8> %y, i32 %z) {4038; SSE-LABEL: movmsk_v16i8_var:4039; SSE:       # %bb.0:4040; SSE-NEXT:    pcmpeqb %xmm1, %xmm04041; SSE-NEXT:    pmovmskb %xmm0, %eax4042; SSE-NEXT:    btl %edi, %eax4043; SSE-NEXT:    setb %al4044; SSE-NEXT:    retq4045;4046; AVX1OR2-LABEL: movmsk_v16i8_var:4047; AVX1OR2:       # %bb.0:4048; AVX1OR2-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm04049; AVX1OR2-NEXT:    vpmovmskb %xmm0, %eax4050; AVX1OR2-NEXT:    btl %edi, %eax4051; AVX1OR2-NEXT:    setb %al4052; AVX1OR2-NEXT:    retq4053;4054; KNL-LABEL: movmsk_v16i8_var:4055; KNL:       # %bb.0:4056; KNL-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm04057; KNL-NEXT:    vpmovmskb %xmm0, %eax4058; KNL-NEXT:    btl %edi, %eax4059; KNL-NEXT:    setb %al4060; KNL-NEXT:    retq4061;4062; SKX-LABEL: movmsk_v16i8_var:4063; SKX:       # %bb.0:4064; SKX-NEXT:    # kill: def $edi killed $edi def $rdi4065; SKX-NEXT:    vpcmpeqb %xmm1, %xmm0, %k04066; SKX-NEXT:    vpmovm2b %k0, %xmm04067; SKX-NEXT:    vmovdqa %xmm0, -{{[0-9]+}}(%rsp)4068; SKX-NEXT:    andl $15, %edi4069; SKX-NEXT:    movzbl -24(%rsp,%rdi), %eax4070; SKX-NEXT:    retq4071  %cmp = icmp eq <16 x i8> %x, %y4072  %val = extractelement <16 x i1> %cmp, i32 %z4073  ret i1 %val4074}4075 4076define i1 @movmsk_v8i16_var(<8 x i16> %x, <8 x i16> %y, i32 %z) {4077; SSE-LABEL: movmsk_v8i16_var:4078; SSE:       # %bb.0:4079; SSE-NEXT:    pcmpgtw %xmm1, %xmm04080; SSE-NEXT:    packsswb %xmm0, %xmm04081; SSE-NEXT:    pmovmskb %xmm0, %eax4082; SSE-NEXT:    btl %edi, %eax4083; SSE-NEXT:    setb %al4084; SSE-NEXT:    retq4085;4086; AVX1OR2-LABEL: movmsk_v8i16_var:4087; AVX1OR2:       # %bb.0:4088; AVX1OR2-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm04089; AVX1OR2-NEXT:    vpacksswb %xmm0, %xmm0, %xmm04090; AVX1OR2-NEXT:    vpmovmskb %xmm0, %eax4091; AVX1OR2-NEXT:    btl %edi, %eax4092; AVX1OR2-NEXT:    setb %al4093; AVX1OR2-NEXT:    retq4094;4095; KNL-LABEL: movmsk_v8i16_var:4096; KNL:       # %bb.0:4097; KNL-NEXT:    # kill: def $edi killed $edi def $rdi4098; KNL-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm04099; KNL-NEXT:    vpmovsxwq %xmm0, %zmm04100; KNL-NEXT:    vptestmq %zmm0, %zmm0, %k14101; KNL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -14102; KNL-NEXT:    vpmovdw %zmm0, %ymm04103; KNL-NEXT:    vmovdqa %xmm0, -{{[0-9]+}}(%rsp)4104; KNL-NEXT:    andl $7, %edi4105; KNL-NEXT:    movzbl -24(%rsp,%rdi,2), %eax4106; KNL-NEXT:    vzeroupper4107; KNL-NEXT:    retq4108;4109; SKX-LABEL: movmsk_v8i16_var:4110; SKX:       # %bb.0:4111; SKX-NEXT:    # kill: def $edi killed $edi def $rdi4112; SKX-NEXT:    vpcmpgtw %xmm1, %xmm0, %k04113; SKX-NEXT:    vpmovm2w %k0, %xmm04114; SKX-NEXT:    vmovdqa %xmm0, -{{[0-9]+}}(%rsp)4115; SKX-NEXT:    andl $7, %edi4116; SKX-NEXT:    movzbl -24(%rsp,%rdi,2), %eax4117; SKX-NEXT:    retq4118  %cmp = icmp sgt <8 x i16> %x, %y4119  %val = extractelement <8 x i1> %cmp, i32 %z4120  ret i1 %val4121}4122 4123define i1 @movmsk_v4i32_var(<4 x i32> %x, <4 x i32> %y, i32 %z) {4124; SSE-LABEL: movmsk_v4i32_var:4125; SSE:       # %bb.0:4126; SSE-NEXT:    pcmpgtd %xmm0, %xmm14127; SSE-NEXT:    movmskps %xmm1, %eax4128; SSE-NEXT:    btl %edi, %eax4129; SSE-NEXT:    setb %al4130; SSE-NEXT:    retq4131;4132; AVX1OR2-LABEL: movmsk_v4i32_var:4133; AVX1OR2:       # %bb.0:4134; AVX1OR2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm04135; AVX1OR2-NEXT:    vmovmskps %xmm0, %eax4136; AVX1OR2-NEXT:    btl %edi, %eax4137; AVX1OR2-NEXT:    setb %al4138; AVX1OR2-NEXT:    retq4139;4140; KNL-LABEL: movmsk_v4i32_var:4141; KNL:       # %bb.0:4142; KNL-NEXT:    # kill: def $edi killed $edi def $rdi4143; KNL-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm14144; KNL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm04145; KNL-NEXT:    vpcmpgtd %zmm0, %zmm1, %k14146; KNL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -14147; KNL-NEXT:    vmovdqa %xmm0, -{{[0-9]+}}(%rsp)4148; KNL-NEXT:    andl $3, %edi4149; KNL-NEXT:    movzbl -24(%rsp,%rdi,4), %eax4150; KNL-NEXT:    vzeroupper4151; KNL-NEXT:    retq4152;4153; SKX-LABEL: movmsk_v4i32_var:4154; SKX:       # %bb.0:4155; SKX-NEXT:    # kill: def $edi killed $edi def $rdi4156; SKX-NEXT:    vpcmpgtd %xmm0, %xmm1, %k04157; SKX-NEXT:    vpmovm2d %k0, %xmm04158; SKX-NEXT:    vmovdqa %xmm0, -{{[0-9]+}}(%rsp)4159; SKX-NEXT:    andl $3, %edi4160; SKX-NEXT:    movzbl -24(%rsp,%rdi,4), %eax4161; SKX-NEXT:    retq4162  %cmp = icmp slt <4 x i32> %x, %y4163  %val = extractelement <4 x i1> %cmp, i32 %z4164  ret i1 %val4165}4166 4167define i1 @movmsk_v2i64_var(<2 x i64> %x, <2 x i64> %y, i32 %z) {4168; SSE2-LABEL: movmsk_v2i64_var:4169; SSE2:       # %bb.0:4170; SSE2-NEXT:    pcmpeqd %xmm1, %xmm04171; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]4172; SSE2-NEXT:    pand %xmm0, %xmm14173; SSE2-NEXT:    movmskpd %xmm1, %eax4174; SSE2-NEXT:    xorl $3, %eax4175; SSE2-NEXT:    btl %edi, %eax4176; SSE2-NEXT:    setb %al4177; SSE2-NEXT:    retq4178;4179; SSE41-LABEL: movmsk_v2i64_var:4180; SSE41:       # %bb.0:4181; SSE41-NEXT:    pcmpeqq %xmm1, %xmm04182; SSE41-NEXT:    movmskpd %xmm0, %eax4183; SSE41-NEXT:    xorl $3, %eax4184; SSE41-NEXT:    btl %edi, %eax4185; SSE41-NEXT:    setb %al4186; SSE41-NEXT:    retq4187;4188; AVX1OR2-LABEL: movmsk_v2i64_var:4189; AVX1OR2:       # %bb.0:4190; AVX1OR2-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm04191; AVX1OR2-NEXT:    vmovmskpd %xmm0, %eax4192; AVX1OR2-NEXT:    xorl $3, %eax4193; AVX1OR2-NEXT:    btl %edi, %eax4194; AVX1OR2-NEXT:    setb %al4195; AVX1OR2-NEXT:    retq4196;4197; KNL-LABEL: movmsk_v2i64_var:4198; KNL:       # %bb.0:4199; KNL-NEXT:    # kill: def $edi killed $edi def $rdi4200; KNL-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm14201; KNL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm04202; KNL-NEXT:    vpcmpneqq %zmm1, %zmm0, %k14203; KNL-NEXT:    vpternlogq {{.*#+}} zmm0 {%k1} {z} = -14204; KNL-NEXT:    vmovdqa %xmm0, -{{[0-9]+}}(%rsp)4205; KNL-NEXT:    andl $1, %edi4206; KNL-NEXT:    movzbl -24(%rsp,%rdi,8), %eax4207; KNL-NEXT:    vzeroupper4208; KNL-NEXT:    retq4209;4210; SKX-LABEL: movmsk_v2i64_var:4211; SKX:       # %bb.0:4212; SKX-NEXT:    # kill: def $edi killed $edi def $rdi4213; SKX-NEXT:    vpcmpneqq %xmm1, %xmm0, %k04214; SKX-NEXT:    vpmovm2q %k0, %xmm04215; SKX-NEXT:    vmovdqa %xmm0, -{{[0-9]+}}(%rsp)4216; SKX-NEXT:    andl $1, %edi4217; SKX-NEXT:    movzbl -24(%rsp,%rdi,8), %eax4218; SKX-NEXT:    retq4219  %cmp = icmp ne <2 x i64> %x, %y4220  %val = extractelement <2 x i1> %cmp, i32 %z4221  ret i1 %val4222}4223 4224define i1 @movmsk_v4f32_var(<4 x float> %x, <4 x float> %y, i32 %z) {4225; SSE-LABEL: movmsk_v4f32_var:4226; SSE:       # %bb.0:4227; SSE-NEXT:    movaps %xmm0, %xmm24228; SSE-NEXT:    cmpeqps %xmm1, %xmm24229; SSE-NEXT:    cmpunordps %xmm1, %xmm04230; SSE-NEXT:    orps %xmm2, %xmm04231; SSE-NEXT:    movmskps %xmm0, %eax4232; SSE-NEXT:    btl %edi, %eax4233; SSE-NEXT:    setb %al4234; SSE-NEXT:    retq4235;4236; AVX1OR2-LABEL: movmsk_v4f32_var:4237; AVX1OR2:       # %bb.0:4238; AVX1OR2-NEXT:    vcmpeq_uqps %xmm1, %xmm0, %xmm04239; AVX1OR2-NEXT:    vmovmskps %xmm0, %eax4240; AVX1OR2-NEXT:    btl %edi, %eax4241; AVX1OR2-NEXT:    setb %al4242; AVX1OR2-NEXT:    retq4243;4244; KNL-LABEL: movmsk_v4f32_var:4245; KNL:       # %bb.0:4246; KNL-NEXT:    # kill: def $edi killed $edi def $rdi4247; KNL-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm14248; KNL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm04249; KNL-NEXT:    vcmpeq_uqps %zmm1, %zmm0, %k14250; KNL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -14251; KNL-NEXT:    vmovdqa %xmm0, -{{[0-9]+}}(%rsp)4252; KNL-NEXT:    andl $3, %edi4253; KNL-NEXT:    movzbl -24(%rsp,%rdi,4), %eax4254; KNL-NEXT:    vzeroupper4255; KNL-NEXT:    retq4256;4257; SKX-LABEL: movmsk_v4f32_var:4258; SKX:       # %bb.0:4259; SKX-NEXT:    # kill: def $edi killed $edi def $rdi4260; SKX-NEXT:    vcmpeq_uqps %xmm1, %xmm0, %k04261; SKX-NEXT:    vpmovm2d %k0, %xmm04262; SKX-NEXT:    vmovdqa %xmm0, -{{[0-9]+}}(%rsp)4263; SKX-NEXT:    andl $3, %edi4264; SKX-NEXT:    movzbl -24(%rsp,%rdi,4), %eax4265; SKX-NEXT:    retq4266  %cmp = fcmp ueq <4 x float> %x, %y4267  %val = extractelement <4 x i1> %cmp, i32 %z4268  ret i1 %val4269}4270 4271define i1 @movmsk_v2f64_var(<2 x double> %x, <2 x double> %y, i32 %z) {4272; SSE-LABEL: movmsk_v2f64_var:4273; SSE:       # %bb.0:4274; SSE-NEXT:    cmplepd %xmm0, %xmm14275; SSE-NEXT:    movmskpd %xmm1, %eax4276; SSE-NEXT:    btl %edi, %eax4277; SSE-NEXT:    setb %al4278; SSE-NEXT:    retq4279;4280; AVX1OR2-LABEL: movmsk_v2f64_var:4281; AVX1OR2:       # %bb.0:4282; AVX1OR2-NEXT:    vcmplepd %xmm0, %xmm1, %xmm04283; AVX1OR2-NEXT:    vmovmskpd %xmm0, %eax4284; AVX1OR2-NEXT:    btl %edi, %eax4285; AVX1OR2-NEXT:    setb %al4286; AVX1OR2-NEXT:    retq4287;4288; KNL-LABEL: movmsk_v2f64_var:4289; KNL:       # %bb.0:4290; KNL-NEXT:    # kill: def $edi killed $edi def $rdi4291; KNL-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm14292; KNL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm04293; KNL-NEXT:    vcmplepd %zmm0, %zmm1, %k14294; KNL-NEXT:    vpternlogq {{.*#+}} zmm0 {%k1} {z} = -14295; KNL-NEXT:    vmovdqa %xmm0, -{{[0-9]+}}(%rsp)4296; KNL-NEXT:    andl $1, %edi4297; KNL-NEXT:    movzbl -24(%rsp,%rdi,8), %eax4298; KNL-NEXT:    vzeroupper4299; KNL-NEXT:    retq4300;4301; SKX-LABEL: movmsk_v2f64_var:4302; SKX:       # %bb.0:4303; SKX-NEXT:    # kill: def $edi killed $edi def $rdi4304; SKX-NEXT:    vcmplepd %xmm0, %xmm1, %k04305; SKX-NEXT:    vpmovm2q %k0, %xmm04306; SKX-NEXT:    vmovdqa %xmm0, -{{[0-9]+}}(%rsp)4307; SKX-NEXT:    andl $1, %edi4308; SKX-NEXT:    movzbl -24(%rsp,%rdi,8), %eax4309; SKX-NEXT:    retq4310  %cmp = fcmp oge <2 x double> %x, %y4311  %val = extractelement <2 x i1> %cmp, i32 %z4312  ret i1 %val4313}4314 4315; TODO: We expect similar result as for PR39665_c_ray_opt,4316; but this is not the case in practice.4317define i32 @PR39665_c_ray(<2 x double> %x, <2 x double> %y) {4318; SSE-LABEL: PR39665_c_ray:4319; SSE:       # %bb.0:4320; SSE-NEXT:    cmpltpd %xmm0, %xmm14321; SSE-NEXT:    movmskpd %xmm1, %ecx4322; SSE-NEXT:    testb $2, %cl4323; SSE-NEXT:    movl $42, %eax4324; SSE-NEXT:    movl $99, %edx4325; SSE-NEXT:    cmovel %edx, %eax4326; SSE-NEXT:    testb $1, %cl4327; SSE-NEXT:    cmovel %edx, %eax4328; SSE-NEXT:    retq4329;4330; AVX1OR2-LABEL: PR39665_c_ray:4331; AVX1OR2:       # %bb.0:4332; AVX1OR2-NEXT:    vcmpltpd %xmm0, %xmm1, %xmm04333; AVX1OR2-NEXT:    vmovmskpd %xmm0, %ecx4334; AVX1OR2-NEXT:    testb $2, %cl4335; AVX1OR2-NEXT:    movl $42, %eax4336; AVX1OR2-NEXT:    movl $99, %edx4337; AVX1OR2-NEXT:    cmovel %edx, %eax4338; AVX1OR2-NEXT:    testb $1, %cl4339; AVX1OR2-NEXT:    cmovel %edx, %eax4340; AVX1OR2-NEXT:    retq4341;4342; KNL-LABEL: PR39665_c_ray:4343; KNL:       # %bb.0:4344; KNL-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm14345; KNL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm04346; KNL-NEXT:    vcmpltpd %zmm0, %zmm1, %k04347; KNL-NEXT:    kmovw %k0, %ecx4348; KNL-NEXT:    testb $2, %cl4349; KNL-NEXT:    movl $42, %eax4350; KNL-NEXT:    movl $99, %edx4351; KNL-NEXT:    cmovel %edx, %eax4352; KNL-NEXT:    testb $1, %cl4353; KNL-NEXT:    cmovel %edx, %eax4354; KNL-NEXT:    vzeroupper4355; KNL-NEXT:    retq4356;4357; SKX-LABEL: PR39665_c_ray:4358; SKX:       # %bb.0:4359; SKX-NEXT:    vcmpltpd %xmm0, %xmm1, %k04360; SKX-NEXT:    kmovd %k0, %ecx4361; SKX-NEXT:    testb $2, %cl4362; SKX-NEXT:    movl $42, %eax4363; SKX-NEXT:    movl $99, %edx4364; SKX-NEXT:    cmovel %edx, %eax4365; SKX-NEXT:    testb $1, %cl4366; SKX-NEXT:    cmovel %edx, %eax4367; SKX-NEXT:    retq4368  %cmp = fcmp ogt <2 x double> %x, %y4369  %e1 = extractelement <2 x i1> %cmp, i32 04370  %e2 = extractelement <2 x i1> %cmp, i32 14371  %u = and i1 %e1, %e24372  %r = select i1 %u, i32 42, i32 994373  ret i32 %r4374}4375 4376define i32 @PR39665_c_ray_opt(<2 x double> %x, <2 x double> %y) {4377; SSE-LABEL: PR39665_c_ray_opt:4378; SSE:       # %bb.0:4379; SSE-NEXT:    cmpltpd %xmm0, %xmm14380; SSE-NEXT:    movmskpd %xmm1, %eax4381; SSE-NEXT:    cmpl $3, %eax4382; SSE-NEXT:    movl $42, %ecx4383; SSE-NEXT:    movl $99, %eax4384; SSE-NEXT:    cmovel %ecx, %eax4385; SSE-NEXT:    retq4386;4387; AVX1OR2-LABEL: PR39665_c_ray_opt:4388; AVX1OR2:       # %bb.0:4389; AVX1OR2-NEXT:    vcmpltpd %xmm0, %xmm1, %xmm04390; AVX1OR2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm14391; AVX1OR2-NEXT:    vtestpd %xmm1, %xmm04392; AVX1OR2-NEXT:    movl $42, %ecx4393; AVX1OR2-NEXT:    movl $99, %eax4394; AVX1OR2-NEXT:    cmovbl %ecx, %eax4395; AVX1OR2-NEXT:    retq4396;4397; KNL-LABEL: PR39665_c_ray_opt:4398; KNL:       # %bb.0:4399; KNL-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm14400; KNL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm04401; KNL-NEXT:    vcmpltpd %zmm0, %zmm1, %k04402; KNL-NEXT:    knotw %k0, %k04403; KNL-NEXT:    kmovw %k0, %eax4404; KNL-NEXT:    testb $3, %al4405; KNL-NEXT:    movl $42, %ecx4406; KNL-NEXT:    movl $99, %eax4407; KNL-NEXT:    cmovel %ecx, %eax4408; KNL-NEXT:    vzeroupper4409; KNL-NEXT:    retq4410;4411; SKX-LABEL: PR39665_c_ray_opt:4412; SKX:       # %bb.0:4413; SKX-NEXT:    vcmpltpd %xmm0, %xmm1, %k04414; SKX-NEXT:    kmovd %k0, %eax4415; SKX-NEXT:    cmpb $3, %al4416; SKX-NEXT:    movl $42, %ecx4417; SKX-NEXT:    movl $99, %eax4418; SKX-NEXT:    cmovel %ecx, %eax4419; SKX-NEXT:    retq4420  %cmp = fcmp ogt <2 x double> %x, %y4421  %shift = shufflevector <2 x i1> %cmp, <2 x i1> poison, <2 x i32> <i32 1, i32 undef>4422  %1 = and <2 x i1> %cmp, %shift4423  %u = extractelement <2 x i1> %1, i64 04424  %r = select i1 %u, i32 42, i32 994425  ret i32 %r4426}4427 4428define i32 @PR39665_c_ray_select(<2 x double> %x, <2 x double> %y) {4429; SSE-LABEL: PR39665_c_ray_select:4430; SSE:       # %bb.0:4431; SSE-NEXT:    cmpltpd %xmm0, %xmm14432; SSE-NEXT:    movmskpd %xmm1, %eax4433; SSE-NEXT:    cmpl $3, %eax4434; SSE-NEXT:    movl $42, %ecx4435; SSE-NEXT:    movl $99, %eax4436; SSE-NEXT:    cmovel %ecx, %eax4437; SSE-NEXT:    retq4438;4439; AVX1OR2-LABEL: PR39665_c_ray_select:4440; AVX1OR2:       # %bb.0:4441; AVX1OR2-NEXT:    vcmpltpd %xmm0, %xmm1, %xmm04442; AVX1OR2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm14443; AVX1OR2-NEXT:    vtestpd %xmm1, %xmm04444; AVX1OR2-NEXT:    movl $42, %ecx4445; AVX1OR2-NEXT:    movl $99, %eax4446; AVX1OR2-NEXT:    cmovbl %ecx, %eax4447; AVX1OR2-NEXT:    retq4448;4449; KNL-LABEL: PR39665_c_ray_select:4450; KNL:       # %bb.0:4451; KNL-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm14452; KNL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm04453; KNL-NEXT:    vcmpltpd %zmm0, %zmm1, %k04454; KNL-NEXT:    knotw %k0, %k04455; KNL-NEXT:    kmovw %k0, %eax4456; KNL-NEXT:    testb $3, %al4457; KNL-NEXT:    movl $42, %ecx4458; KNL-NEXT:    movl $99, %eax4459; KNL-NEXT:    cmovel %ecx, %eax4460; KNL-NEXT:    vzeroupper4461; KNL-NEXT:    retq4462;4463; SKX-LABEL: PR39665_c_ray_select:4464; SKX:       # %bb.0:4465; SKX-NEXT:    vcmpltpd %xmm0, %xmm1, %k04466; SKX-NEXT:    knotw %k0, %k04467; SKX-NEXT:    kmovd %k0, %eax4468; SKX-NEXT:    testb $3, %al4469; SKX-NEXT:    movl $42, %ecx4470; SKX-NEXT:    movl $99, %eax4471; SKX-NEXT:    cmovel %ecx, %eax4472; SKX-NEXT:    retq4473  %cmp = fcmp fast ogt <2 x double> %x, %y4474  %b0 = extractelement <2 x i1> %cmp, i64 04475  %b1 = extractelement <2 x i1> %cmp, i64 14476  %b = select i1 %b0, i1 %b1, i1 false4477  %r = select i1 %b, i32 42, i32 994478  ret i32 %r4479}4480 4481define i32 @pr67287(<2 x i64> %broadcast.splatinsert25) {4482; SSE2-LABEL: pr67287:4483; SSE2:       # %bb.0: # %entry4484; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm04485; SSE2-NEXT:    pxor %xmm1, %xmm14486; SSE2-NEXT:    pcmpeqd %xmm0, %xmm14487; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,0,3,2]4488; SSE2-NEXT:    movmskpd %xmm0, %eax4489; SSE2-NEXT:    testl %eax, %eax4490; SSE2-NEXT:    setne %al4491; SSE2-NEXT:    movd %xmm1, %ecx4492; SSE2-NEXT:    orb %al, %cl4493; SSE2-NEXT:    testb $1, %cl4494; SSE2-NEXT:    je .LBB98_24495; SSE2-NEXT:  # %bb.1:4496; SSE2-NEXT:    movw $0, 04497; SSE2-NEXT:  .LBB98_2: # %middle.block4498; SSE2-NEXT:    xorl %eax, %eax4499; SSE2-NEXT:    retq4500;4501; SSE41-LABEL: pr67287:4502; SSE41:       # %bb.0: # %entry4503; SSE41-NEXT:    pxor %xmm1, %xmm14504; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7]4505; SSE41-NEXT:    pcmpeqq %xmm1, %xmm04506; SSE41-NEXT:    movmskpd %xmm0, %eax4507; SSE41-NEXT:    testl %eax, %eax4508; SSE41-NEXT:    setne %al4509; SSE41-NEXT:    movd %xmm0, %ecx4510; SSE41-NEXT:    orb %al, %cl4511; SSE41-NEXT:    testb $1, %cl4512; SSE41-NEXT:    je .LBB98_24513; SSE41-NEXT:  # %bb.1:4514; SSE41-NEXT:    movw $0, 04515; SSE41-NEXT:  .LBB98_2: # %middle.block4516; SSE41-NEXT:    xorl %eax, %eax4517; SSE41-NEXT:    retq4518;4519; AVX1-LABEL: pr67287:4520; AVX1:       # %bb.0: # %entry4521; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm14522; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7]4523; AVX1-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm04524; AVX1-NEXT:    vtestpd %xmm0, %xmm04525; AVX1-NEXT:    setne %al4526; AVX1-NEXT:    vmovd %xmm0, %ecx4527; AVX1-NEXT:    orb %al, %cl4528; AVX1-NEXT:    testb $1, %cl4529; AVX1-NEXT:    je .LBB98_24530; AVX1-NEXT:  # %bb.1:4531; AVX1-NEXT:    movw $0, 04532; AVX1-NEXT:  .LBB98_2: # %middle.block4533; AVX1-NEXT:    xorl %eax, %eax4534; AVX1-NEXT:    retq4535;4536; AVX2-LABEL: pr67287:4537; AVX2:       # %bb.0: # %entry4538; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm14539; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]4540; AVX2-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm04541; AVX2-NEXT:    vtestpd %xmm0, %xmm04542; AVX2-NEXT:    setne %al4543; AVX2-NEXT:    vmovd %xmm0, %ecx4544; AVX2-NEXT:    orb %al, %cl4545; AVX2-NEXT:    testb $1, %cl4546; AVX2-NEXT:    je .LBB98_24547; AVX2-NEXT:  # %bb.1:4548; AVX2-NEXT:    movw $0, 04549; AVX2-NEXT:  .LBB98_2: # %middle.block4550; AVX2-NEXT:    xorl %eax, %eax4551; AVX2-NEXT:    retq4552;4553; KNL-LABEL: pr67287:4554; KNL:       # %bb.0: # %entry4555; KNL-NEXT:    vpxor %xmm1, %xmm1, %xmm14556; KNL-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]4557; KNL-NEXT:    vptestnmq %zmm0, %zmm0, %k04558; KNL-NEXT:    kmovw %k0, %eax4559; KNL-NEXT:    kmovw %k0, %ecx4560; KNL-NEXT:    testb $3, %cl4561; KNL-NEXT:    setne %cl4562; KNL-NEXT:    orb %cl, %al4563; KNL-NEXT:    testb $1, %al4564; KNL-NEXT:    je .LBB98_24565; KNL-NEXT:  # %bb.1:4566; KNL-NEXT:    movw $0, 04567; KNL-NEXT:  .LBB98_2: # %middle.block4568; KNL-NEXT:    xorl %eax, %eax4569; KNL-NEXT:    vzeroupper4570; KNL-NEXT:    retq4571;4572; SKX-LABEL: pr67287:4573; SKX:       # %bb.0: # %entry4574; SKX-NEXT:    vpxor %xmm1, %xmm1, %xmm14575; SKX-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]4576; SKX-NEXT:    vptestnmq %xmm0, %xmm0, %k04577; SKX-NEXT:    kortestb %k0, %k04578; SKX-NEXT:    setne %al4579; SKX-NEXT:    kmovd %k0, %ecx4580; SKX-NEXT:    orb %al, %cl4581; SKX-NEXT:    testb $1, %cl4582; SKX-NEXT:    je .LBB98_24583; SKX-NEXT:  # %bb.1:4584; SKX-NEXT:    movw $0, 04585; SKX-NEXT:  .LBB98_2: # %middle.block4586; SKX-NEXT:    xorl %eax, %eax4587; SKX-NEXT:    retq4588entry:4589  %0 = and <2 x i64> %broadcast.splatinsert25, <i64 4294967295, i64 4294967295>4590  %1 = icmp eq <2 x i64> %0, zeroinitializer4591  %shift = shufflevector <2 x i1> %1, <2 x i1> zeroinitializer, <2 x i32> <i32 1, i32 poison>4592  %2 = or <2 x i1> %1, %shift4593  %3 = extractelement <2 x i1> %2, i64 04594  %4 = extractelement <2 x i1> %1, i64 04595  %5 = or i1 %3, %44596  br i1 %5, label %6, label %middle.block4597 45986:                                                ; preds = %entry4599  store i16 0, ptr null, align 24600  br label %middle.block4601 4602middle.block:                                     ; preds = %6, %entry4603  ret i32 04604}4605